iOS OC 成员变量是强引用还是弱引用
2016-05-06 10:46
253 查看
成员变量,本例中的是实例成员变量,是作用于整个类对象内的。从生命周期来看,它比局部变量要长一些,但它默认是私有的,其他对象是无法访问到的。
比如你一个变量放在@interface 中,你申请一个实体时,变量存活周期跟你实体一样。
因为成员变量的作用域是整个类对象内,所以在ARC环境下OC里面的成员变量应该是
strong属性的。
链接:http://www.zhihu.com/question/23347971/answer/24332408
例子:
头文件:
源文件:
我的理解是:
局部变量是根据其生存周期定义的,在源文件中的array1,其生命周期是在以“{ }”为界限的代码块中,虽然它的名称与成员变量相同,但不是同一个变量。成员变量是用于一个区域内的临时变量。
成员变量,本例中的是实例成员变量,是作用于整个类对象内的。从生命周期来看,它比局部变量要长一些,但它默认是私有的,其他对象是无法访问到的。因此,一般自定义方法,作为一个接口让其他对象访问这个变量。因此,成员变量用于类内部,无需与外界接触的变量。
根据成员变量的私有性,为了方便访问,所以就有了属性变量。属性变量的好处就是允许让其他对象访问到该变量。当然,你可以设置只读或者可写等,设置方法也可自定义。所以,属性变量是用于与其他对象交互的变量。
目前我是这么理解的,希望对你有帮助。
成员变量和属性变量是完全一样的,别被obj-c
2.0的灵活写法给误导了。
但是属性变量可以作为方法名字,也就是可以有其他名字。
http://www.cocoachina.com/bbs/read.php?tid-245245.html 看到一篇文章:
ios中的成员变量定义在@interface 和@implementation 中的区别是什么?
@interface 中是成员变量
@implementation 是全局变量
作用域和存活区间的问题
比如你一个变量放在@interface 中,你申请一个实体时,变量存活周期跟你实体一样
在@implementation 中,因为是全局,所以一直存在
非常感谢!
还想了解下,具体的作用域的区别是什么?
作用域,就是这个变量在存活区域,
比如说成员变量,就是放在@interface,作用域是类里面
全局变量,是整个程序
临时变量一般是函数内
@implementation
testClass{
UIView *_test;
}
这样的变量应该不是全局的吧?
@implementation testClass{ UIView *_test; }
这个情况比较少个,不推荐,这个情况是成员变量
但是默认是@private
其实都是成员变量,放在@implemetation里的是私有的而已。
都是成员变量,只是放在@implemetation中的变量无法被子类继承
比如你一个变量放在@interface 中,你申请一个实体时,变量存活周期跟你实体一样。
因为成员变量的作用域是整个类对象内,所以在ARC环境下OC里面的成员变量应该是
strong属性的。
链接:http://www.zhihu.com/question/23347971/answer/24332408
例子:
头文件:
@interface ViewController : UIViewController { //成员变量 NSArray *array1; } //属性变量 @property (nonatomic,strong) NSArray *array2; @end
源文件:
- (void)viewDidLoad { [super viewDidLoad]; array1 = [[NSArray alloc] initWithObjects:@"abcde", nil]; array2 = [[NSArray alloc] initWithObjects:@"123abc", nil]; { // 局部变量 NSArray *array1 = [[NSArray alloc] initWithObjects:@"12345", nil]; } NSLog(@"\narray1 : %@\n array2 : %@",array1,array2); }
我的理解是:
局部变量是根据其生存周期定义的,在源文件中的array1,其生命周期是在以“{ }”为界限的代码块中,虽然它的名称与成员变量相同,但不是同一个变量。成员变量是用于一个区域内的临时变量。
成员变量,本例中的是实例成员变量,是作用于整个类对象内的。从生命周期来看,它比局部变量要长一些,但它默认是私有的,其他对象是无法访问到的。因此,一般自定义方法,作为一个接口让其他对象访问这个变量。因此,成员变量用于类内部,无需与外界接触的变量。
根据成员变量的私有性,为了方便访问,所以就有了属性变量。属性变量的好处就是允许让其他对象访问到该变量。当然,你可以设置只读或者可写等,设置方法也可自定义。所以,属性变量是用于与其他对象交互的变量。
目前我是这么理解的,希望对你有帮助。
成员变量和属性变量是完全一样的,别被obj-c
2.0的灵活写法给误导了。
但是属性变量可以作为方法名字,也就是可以有其他名字。
http://www.cocoachina.com/bbs/read.php?tid-245245.html 看到一篇文章:
ios中的成员变量定义在@interface 和@implementation 中的区别是什么?
ios中的成员变量定义在@interface 和@implementation 中的区别是什么?@interface 中是成员变量
@implementation 是全局变量
作用域和存活区间的问题
比如你一个变量放在@interface 中,你申请一个实体时,变量存活周期跟你实体一样
在@implementation 中,因为是全局,所以一直存在
非常感谢!
还想了解下,具体的作用域的区别是什么?
作用域,就是这个变量在存活区域,
比如说成员变量,就是放在@interface,作用域是类里面
全局变量,是整个程序
临时变量一般是函数内
@implementation
testClass{
UIView *_test;
}
这样的变量应该不是全局的吧?
@implementation testClass{ UIView *_test; }
这个情况比较少个,不推荐,这个情况是成员变量
但是默认是@private
其实都是成员变量,放在@implemetation里的是私有的而已。
都是成员变量,只是放在@implemetation中的变量无法被子类继承
相关文章推荐
- iOS 多线程(4)NSOperation
- ios 安全相关工具整理
- iOS WebRTC
- iOS之修改项目BUG之旅--(三)
- iOS私有API的了解
- ios字体动态下载
- IOS开发-自动布局Autoresizing和Autolayout
- ios自定义AlertView
- iOS: 属性声明strong和retain竟然不一样
- 通知机制(NSNotification)
- iOS--- 文件路径保存
- iOS多线程(3)GCD
- iOS - 功能模块 - 发布时间
- iOS 键盘遮挡
- IOS SRWebSocket的使用
- iOS单个ViewController支持横屏,其他全竖屏方法
- iOS多线程中performSelector: 和dispatch_time的不同
- IOS开发中,TextField和TextView有何区别
- iOS开发-进阶:被误解的MVC和被神化的MVVM(作者:唐巧)
- IOS项目代码行统计