@property是什么?
@property是一個是編譯器特性买窟,在Xcode 4.4之前蔑祟,編譯器會自動生成setter和getter方法的聲明疆虚。
例如:作為方法聲明,為別的文件調(diào)用篇亭,位置則在
@interface
@property NSInteger age;
@end
等價于
@interface
- (void)setAge:(NSInteger)age;
- (NSInteger)age;
@end
生成的setter译蒂,getter方法聲明柔昼,存在一定的格式
存在方法聲明自然對應(yīng)著方法實現(xiàn),因此乙嘀,還存在另一個
@synthesize?
自動生成setter/getter方法的實現(xiàn)虎谢。例如:
作為方法的實現(xiàn)擎场,位置則在
@implementation
@synthesize name; //@synthesize age = age;
@end
左邊是屬性名玩般,右邊是實例變量坏为。如果實例變量不存在匀伏,就會創(chuàng)建熙侍,但這是一個私有的成員變量, 是在.m文件中生成的, 不是在.h文件中生成的(extension)
@interface Person ()
{
NSString *_name;
}
@end
因此蛉抓,無法在類外直接通過->_name訪問
如果我們實現(xiàn)了setter/getter方法的話,那么編譯器便不會再生成相應(yīng)的setter/getter的實現(xiàn)笑跛;如果我們setter和getter均實現(xiàn),則編譯器不但不會生成setter和getter方法的實現(xiàn)晤柄,也不會生成默認形式的實例變量芥颈,即使實例變量不存在。即@synthesize age = _age;? 是無效的
Xcode4.4之后盾计,@property 進行了增強署辉,@synthesize可以省略哥攘,默認寫法?@synthesize age = _age;