参考:http://blog.csdn.net/u014783027/article/details/24408209
self.xx是访问属性的,集成并生成了setter和getter方法,如果属性的修饰符有retain,那么当使用self.xx的时候相应地属性的引用计数器生成了setter方法而进行加1操作,retaincount为2.
而_xx是访问实例变量的,只对实例变量进行声明,是对指针的赋值,而没有相应的方法。
- (void)setX:(id)theX{
if (_x!=theX) {
[_x release];
_x = [theX copy];
}
}
- (NSString *)getX{
return _x;
}
经过@property的属性,在赋值的时候最好带上self.xx来访问。比如声明为retain的属性a,只有经过self.a=x;这样才会对x retain一次,否则不会。赋值的时候最好这样写
A *_a = [[A alloc]init];
self.a = _a;
[_a release]
经过@synthesize的属性,在释放的时候,如果@property的释放的时候要这样写:self.a = nil
也可以这样写
[a release];
a = nil;