原文地址: https://www.cnblogs.com/mukekeheart/p/8251366.html
1,@property与@synthesize
@property 声明的属性默认会生成一个_类型的成员变量,同时也会生成setter/getter方法.但这只是ios5之后,苹果推出的一个新机制.看老代码时,经常看到一个大括号里面定义了成员变量,同时用了@property声明,而且还在@implementation中使用@synthesize方法,就像下面的代码这样:
@interface ViewController ()
{
// 1.声明成员变量NSString *myString;
}
//2.在用@property
@property(nonatomic, copy) NSString *myString;
@end
@implementation ViewController
//3.最后在@implementation中用synthesize生成set方法
@synthesize myString;
@end
2,self.xx与_xx
self.xx是调用的xx属性的get/set方法,而_xx则只是使用成员变量_xx,并不会调用get/set方法.两者的更深层次的区别在于,通过存取方法访问比直接访问多做了一些其他的事情(例如内存管理,复制值等), 例如如果属性在@property中属性的修饰有retain,那么当使用self.xx的时候相应属性的引用计数器由于生成了setter方法而进行加1操作,此时的retaincount为2;