黑马程序员——OC语言基础---Static关键字使用
来源:互联网 发布:中京商品交易软件 编辑:程序博客网 时间:2024/05/16 13:06
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
Static关键字使用
1、关于OC中的Static关键字使用
被static修饰的全局变量或者局部变量,都会放在内存的静态区。最后由系统释放。
在OC中static关键字使用误区
使用static修饰实例变量是不被允许的
使用static修饰了方法,也是错误的
2、在OC中static可以怎么用?
1、在.h头文件中,可以定义全局静态变量,存在于内存的静态区,仅限于当前类使用。但不能用类名访问(区别于Java);它的声明必须要放在@interface外面;如下:
<span style="font-size:14px;">static int num = 1;//在头文件中只有这一种使用方式,并且必须加static关键字;@interface Dog: NSObject{ //实例变量不能声明为静态 // static int _speed;//编译不通过 }//static int num = 1;//定义在这里,编译不通过-(void)dogTest;@end #import "Dog.h"@implementation Dog-(void)dogTest{ num = 100; NSLog(@"dogTestnum = %d,num的地址 = %p",num,&num);} @end</span>
其他的类可以将这个头文件导入,也可以访问这个num,只不过是将这个num的静态变量为当前这个类完全复制了一份;
比如:
<span style="font-size:14px;">#import <Foundation/Foundation.h>#import "Dog.h"//导入dog的类@interface Person : NSObject-(void)personTest;@end#import "Person.h"@implementation Person-(void)personTest{ NSLog(@"personTest num=%d,num的地址=%p",num,&num);}@end<span style="font-family: SimSun; background-color: rgb(255, 255, 255);"> </span></span>
然后我们可以在main函数中将这两个值和地址打印出来:
int main(int argc, const char *argv[]){ @autoreleasepool { [[Dog new] dogTest]; Person *per = [Person new]; [per personTest]; } return 0; }
通过打印结果我们发现:地址不一样,值也不一样;说明他们是两份完全不一样的变量。
2、在.m实现文件中,可以定义全局变量,它存在于全局静态区中,不可以被其他类操作访问,仅局限与当前类;可以声明在@implementation外面,也可以声明在里面,都一样;
并且这样声明,如下:
<span style="font-size:14px;">//static int num = 10;//也可以声明在这里@implementation Dog//静态的全局变量//只能当前文件中使用static int num= 10;-(void)run{ //静态局部变量 // static int num = 10; // num+=1; NSLog(@"num = %d",num); // num++; }<span style="font-family: SimSun; background-color: rgb(255, 255, 255);"> </span></span>
声明全局变量,不管声明在.h中,还是声明在.m中,它随类的加载而加载,只会初始化一次。
因为类只会被加载一次。会有默认初始值。
3,可以定义局部变量和C语言一样,延长变量生命周期 ,加了static关键字的局部变量,存在于全局作用域中。随着程序的运行,这个局部变量只会被初始化一次;
<span style="font-size:14px;">#import "Dog.h"#pragma mark 狗类的实现@implementation Dog-(void)run{ //定义局部静态变量 m static int m=10; NSLog(@"m= %d",m); m++;} @end</span><span style="font-size:12px;"> </span><span style="font-size:12px; font-family: SimSun; background-color: rgb(255, 255, 255);"> </span>
注意:
在点m文件中,Static型全局变量的可见性,局限于当前.m文件其他的文件中的类,无法访问到该变量
- 黑马程序员——OC语言基础---Static关键字使用
- 黑马程序员——OC语言基础---extern和static关键字
- 黑马程序员——OC语言基础---@property关键字介绍及使用
- 黑马程序员——OC语言基础---@synthesize关键字介绍和使用
- 黑马程序员-OC语言-关于OC中的static关键字使用(听课笔记)
- 黑马程序员—static关键字
- 黑马程序员------OC基础-----关键字
- 黑马程序员——Java基础---static关键字
- 黑马程序员—OC语言基础—基础语法知识
- 黑马程序员_iOS开发C语言基础之关键字typedef、static、extern使用
- 黑马程序员----Static关键字使用
- 黑马程序员——OC语言基础篇---核心语法
- 黑马程序员——OC语言基础篇---内存管理
- 黑马程序员—OC语言基础—类与对象
- 黑马程序员—OC语言基础—方法小结
- 黑马程序员—OC语言基础—核心语法小结
- 黑马程序员—OC语言基础—内存管理
- 黑马程序员—OC语言基础—Foundation框架小结
- DAO和Service层的一些解释
- 与附近的人聊天、
- 字符串的排列
- 四校联训Round4心得体会
- xml解析dom4j学习
- 黑马程序员——OC语言基础---Static关键字使用
- HDU 5495(置换群)
- mac开发android之环境搭建--AndroidStudio
- Codeblocks+wxWidgets安装及编译
- foj2204 圆环没有连续7个黑或白的可能数
- SVN的使用
- HTTP协议漫谈
- Node.JS学习笔记: 基础篇
- public static void main(String[] args){}函数