合成存储方法,局部/全局变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合成存储方法,局部/全局变量相关的知识,希望对你有一定的参考价值。
--------合成存取方法--------
- Objective-C从 OC 2.0版本开始,自动合成了setter 方法和 getter 方法。而且,如果开发者需要自己控制某个setter 方法和 getter 方法的实现时,可以自己提供 setter 方法和 getter 方法,自己提供的setter 方法和 getter 方法会覆盖系统自动合成的相应方法。
- 需要编译器自动合成 setter 方法和 getter 方法需要在需要生成方法的属性面前加上 @property (必须) 和 @synthesize(可以省略) 指令。(例: @property int numerator; @synthesize numerator = _numerator; // =_numerator 可以省略)
- 其实并不需要使用 @synthesize 指令,使用 @property 指令就足够了。编译器会自动为你生成 setter 和 getter 方法。但是,注意,如果你不使用 @synthesize 那么编译器生成的实例变量会以下划线(_)字符作为其名称的第一个字符。
- 使用合成存取方法,属性名称的前面不要以 new 、alloc 、copy 或者 init 这些词开头。这与编译器的一些假定有关。
/* @property 可以使用的一些指示符
1.readonly:系统只合成getter方法,不再合成setter方法。
2.readwrite:系统合成getter和setter方法,默认是这样。
3.strong:指示符指定该属性对被赋值对象持有强引用(只要该强引用指向被赋值的对象,那么该对象就不会被自动回收)。多用在 其他对象(除代理\UI控件\字符串以外的对象)
4.week:指示符指定该属性对被赋值对象持有弱引用(即使该弱引用指向被赋值的对象,该对象也可能被回收)。多用在 代理\UI控件
5.unsafe_unretained:类似于week,不同是指针所引用的对象回收之后,该指针不会被赋值为nil,该指示符极少用。
6.copy : 多用在字符串类型
7.assign : 多用在非对象类型(基本数据类型int\float\BOOL\枚举\结构体)
*/
--------局部变量和全局变量--------
- 局部变量:在还是内部定义的变量
- 作用域:从定义变量开始,到代码块结束
- 生命周期:定义开始到代码块结束,就会被回收
- 函数的形参也是局部变量
- 无固定初值
- 局部变量没有记忆力。方法内定义的局部变量只会在方法内有效,当方法返回时,这些变量的值都消失了。每次调用方法时,该方法内的局部变量(如果有的话)都是用变量声明重新初始化一次。(等于重新分配了一块存储数据的内存空间,以前局部变量所拥有的空间已经被回收、销毁,不会再次拥有)
- 全局变量:函数外面定义的变量
- 作用域:定义开始到文件结尾(能被后面所有函数共享)
- 生命周期:程序一开始就分配内存,到程序退出才销毁
- 默认的初值为0
- 全局变量有自己的记忆力
- static 关键字:
- 在变量声明前加上 static 关键字,可以使局部变量保留多次调用一个方法所得的值。(即 存储数据的内存空间不会被回收与销毁,会记录下局部变量所拥有的数据,在下一次需要这个局部变量时将会返回唯一的存储数据的内存地址,和原有的数据)
以上是关于合成存储方法,局部/全局变量的主要内容,如果未能解决你的问题,请参考以下文章