例子:
头文件:
@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,其生命周期是在以“{ }”为界限的代码块中,虽然它的名称与成员变量相同,但不是同一个变量。成员变量是用于一个区域内的临时变量。
成员变量,本例中的是实例成员变量,是作用于整个类对象内的。从生命周期来看,它比局部变量要长一些,但它默认是私有的,其他对象是无法访问到的。因此,一般自定义方法,作为一个接口让其他对象访问这个变量。因此,成员变量用于类内部,无需与外界接触的变量。
根据成员变量的私有性,为了方便访问,所以就有了属性变量。属性变量的好处就是允许让其他对象访问到该变量。当然,你可以设置只读或者可写等,设置方法也可自定义。所以,属性变量是用于与其他对象交互的变量。
成员变量
成员变量定义在类内部。
@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);
}
-
局部变量
局部变量定义在方法里。
属性变量
strong
指明此属性跟目标对象有着紧密的(拥有)关系。
weak
指明与目标对象是松散的(非拥有)关系。
假如目标对象被释放了,属性值将自动被设为 nil
.
OS X v10.6 和 iOS 4不支持弱属性; 取而代之的是 assign
.)
copy
指明对象的副本应当用于赋值操作。
之前的值发送给一个 release
消息.
副本通过调用 copy
方法被创建. 除了对象类型(实现了 NSCopying
协议),对其它类型这个额外属性是无效的。
assign
指明 setter 使用简单赋值。这个额外属性是默认选项。
在标量类型中你会用到这个额外属性,例如 NSInteger
和 CGRect
.
retain
指明对象赋值时执行 retain
。
之前的值将发给一个 release
消息。
在 OS X v10.6 以及更新的版本中,你可以使用 __attribute__
关键字来指定一个 Core Foundation 属性应当被当做一个用于内存管理的 Objective-C 对象对待