ios self.xx和_xx的区别

原文地址: 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;

你可能感兴趣的:(ios self.xx和_xx的区别)