成员变量,本例中的是实例成员变量,是作用于整个类对象内的。从生命周期来看,它比局部变量要长一些,但它默认是私有的,其他对象是无法访问到的。
比如你一个变量放在@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中的变量无法被子类继承