objective-c在Xcode中@property相關參數的解釋

objective-c在其對象擁有成員變量時,咱們爲了保持代碼的封裝,會將成員變量設置爲@protected,併爲成員變量編寫setter和getter方法。html

如:objective-c

@interface Person : NSObject
{
    @protected
    int _age;
}
- (int)get;
- (void)setAge:(int)age;
@end

@implementation Person
- (int)get
{
    return _age;
}
- (void)setAge:(int)age
{
    _age = age;
}
@end

在Xcode中,爲了讓咱們擺脫這種枯燥的格式化代碼,增長了@property屬性設置,使用@property屬性,編譯器會自動幫咱們實現這些代碼,安全

如:多線程

@interface Person : NSObject
@property int age;
@end

@implementation Person
@end

這段代碼通過編譯器編譯後與上面的代碼徹底相同。性能

可是,在實際應用中,內存管理,多線程,成員變量是否只讀等等需求不少,因此@property爲咱們提供了不少參數來實現這些不一樣的需求,以下:atom

1.內存管理相關:spa

*retain:release舊值,retain新值(適用於對象類型的成員變量)線程

*assign:直接賦值(默認參數,適用於基本數據類型的成員變量)code

*copy: release舊值,copy新值htm

注:關於內存管理,請閱讀http://www.cnblogs.com/yoran-yang/p/4293546.html

以retain爲例:

@interface Person : NSObject
@property (retain) Book *book;
@end

等同於:

@interface Person : NSObject
{
    @protected
    Book *_book;
}
- (Book *)get;
- (void)setBook:(Book *)book;
@end

@implementation Person
- (Book *)get
{
    return _book;
}
- (void)setBook:(Book *)book
{
    if(book != _book)
    {
        [book release];
        _book = [book retain];
    }
}
@end

2.讀寫控制相關

*readwrite:同時生成getter與setter的聲明和實現(默認參數)

*readonly:只生成getter方法

3.多線程相關

*nonatomic:禁止多線程,變量保護,提升性能,讀寫成員變量的操做效率能夠提升數倍(強烈建議在非多線程環境的程序加上此參數)

*atomic:線程安全的,性能低(默認參數爲線程安全的,即加線程鎖)

4.setter和getter方法的名稱

*getter =(getter的方法名)

*setter =(setter的方法名)注意:此方法名必須加上後面的「:」。

相關文章
相關標籤/搜索