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

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

比如你一个变量放在@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 OC 成员变量是强引用还是弱引用)