您的位置:首页 > 移动开发 > IOS开发

iOS OC 成员变量是强引用还是弱引用

2016-05-06 10:46 253 查看
成员变量,本例中的是实例成员变量,是作用于整个类对象内的。从生命周期来看,它比局部变量要长一些,但它默认是私有的,其他对象是无法访问到的。

比如你一个变量放在@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中的变量无法被子类继承
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: