Objective-C 學習筆記 – part 5 – 申明屬性

來源:互聯網
上載者:User

本節討論了如何使用申明屬性與系統內部實際使用了自動產生的方法用作屬性訪問的介面,由此引入的執行個體變數管理等等問題。

使用申明屬性 declared properties 可以方便地實現訪問器方法 accessor methods.

申明屬性為訪問器方法行為提供一種清晰,明確的規範。

編譯器幫你將申請屬性擴充為訪問器方法實現以短減你書寫的代碼量。

申明屬性也是一類別識別項並且有自己的範圍,因此編譯器可以探測到未申明的屬性。

文法:
@property(attributes) type name;

例如:
@interface MyClass : NSObject
{
    float value;
}
@property float value;
@end

setter 的幾種語義:
 assign: 簡單賦值
retain: 前一個值會收到一個 release 訊息。
copy: 複製

如果你不使用 記憶體回收行程,則需要指定 assign/retain/copy,否則會收到一個警告。

可以指定原子性和非原子性。

如果是 retain/copy, 則在未指定 automic 時會自動使用一個內部鎖來實現原子性。

如你使用記憶體回收機制,則可以指定引用是強引用還是弱引用,不過這個是非正式的。

@synthesize firstName, lastName, age = yearsOld;

指定了執行個體變數名的 屬性申明。

不論你是否指定執行個體變數名,這個變數都只對當前類有效而不對父類可見。

@dynamic

關於使用 @properties

任何 Object-C 的類都可以申明。

可以在子類中重新申明,而且 modifier

copy:
使用這個 property 在某些情形下比較有用,比如 要賦值一個 mutable 的 string 這樣保證後續的修改不會影響到這個已賦值的變數。

非 asign 的 property 應該
 - (void)dealloc {
    [property release];
    [super dealloc];
}
或者(新版本,因為無法直接存取執行個體變數)
- (void)dealloc {
    [self setProperty:nil];
    [super dealloc];
}

子類中的 property 可以使用 writable 蓋掉父類中的 readonly 屬性。

不同的屬性對效能的影響。

在舊環境中 @synthesize 屬性的需要手動申明執行個體變數,而新系統中則不需要,系統會 自動幫你做。

本節涉及到不同類型的屬性及由此帶來的賦值方式差異,運行時效能,操作原子性,安全執行緒,向後性相容性等問題,需要在使用仔細參照。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.