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


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

如:

@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為我們提供了很多參數來實現這些不同的需求,如下:

1.內存管理相關:

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

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

*copy: release舊值,copy新值

注:關於內存管理,請閱讀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的方法名)注意:此方法名必須加上后面的“:”。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com