oc中的static
2016-01-15 15:35
218 查看
关于static从以下几个例子中来说明
1.局部变量中的static
2.全局变量中的static
1.局部变量中的static
//局部变量 //1.只会被初始化一次,也就是只有一份内存。 //2.生命周期被改变,一直到程序结束才释放 // age没有被static修饰的时候 - (void)Aboutstatic { int age = 21; age--; NSLog(@"age==%d",age); } - (void)viewDidLoad { [super viewDidLoad]; //在此打印三次结果,看看输出 [self Aboutstatic]; [self Aboutstatic]; [self Aboutstatic]; } //控制台输出结果可以看到,变量age每次都被初始化为21,所以三次打印结果都为20 2016-01-15 14:41:47.907 [1754:258152] age==20 2016-01-15 14:41:47.908 [1754:258152] age==20 2016-01-15 14:41:47.908 [1754:258152] age==20 //age通过static修饰之后 - (void)Aboutstatic { static int age = 21; age--; NSLog(@"age==%d",age); } //看看控制台输出结果 2016-01-15 14:49:58.475 [1768:266933] age==20 2016-01-15 14:49:58.476 [1768:266933] age==19 2016-01-15 14:49:58.476 [1768:266933] age==18 //第二次输出结果明显与第一次不一样,使用了static修饰之后,age的内存地址只有一份,只被初始化了一次,第一次初始化之后是21,21--之后第一次就输出了20,当第二次调用的时候,由于没有被重新初始化,自然就输出了19.
2.全局变量中的static
//全局变量 /** 1.默认情况没有被static修饰的情况下 ①作用域是整个项目,项目中任何地方都能通过extern关键字来引用 ②还是只会被初始化一次,内存地址同样只有一份 */ 1.第一个类中声明一个全局变量和一个方法 int age_ = 21; - (void)logAge { NSLog(@"age_==%d",age_); } 2.在第二个类中使用extern来访问age_ extern int age_; NSLog(@"%d",age_); 看到控制台打印输出 2016-01-15 15:26:50.224 [1810:289550] 21 /** 2.被static修饰的情况下 ①作用域只限于当前文件,项目中任何地方都不能通过extern关键字来引用 ②改变了作用域,但是没有改变生命周期 */ static int age_ = 21; 当继续使用extern引用的时候,就会报错 Undefined symbols for architecture x86_64: "_age_", referenced from: -[2eController viewDidLoad] in 2Controller.o 错误是说在引用age_的时候,找不到这个变量,是因为使用了static修饰,所以除了第一个类自己除外,都访问不到
相关文章推荐
- Lucene4.6+Solr4.6+Heritrix1.14+S2SH实战开发垂直搜索引擎视频教程
- java25:SimpleDateFormat;DateFormat
- Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
- redis 学习和使用demo
- 微信授权登陆接入第三方App(步骤总结)Android
- 2016年,一点感想
- SoapUI传递数组方式
- 深入理解cocos 坐标系
- 关于修改单例信息
- oracle学习笔记 学习前奏
- Oracle集群连接-JDBC使用TNS连接多节点Oracle
- Mac,虚拟机CocoaPods环境配置,安装及使用
- android WebView 初步了解
- 如何通过“云之讯”平台,完成短信的发送
- Assembly.Load(path).CreateInstance 反射出错解决办法
- Spring 2.0技术手册 -1
- asp.net下上传图片加实时预览
- Codeforces Round #339 (Div. 2) (A 高精度)
- 常用设计模式举例,观察者模式,装饰模式,工厂模式,单列模式---Head Frist 设计模式源码
- Android AsyncTask 源码解析