【Objective-C學習記錄】第二十一天

來源:互聯網
上載者:User

標籤:

溫故而知新,繼續複習。

OC中可以通過聲明屬性來省略setter和getter,達到讓代碼簡潔的目的。使用屬性時,不需要在介面和m檔案中進行執行個體變數的聲明和setter getter的實現,系統會自動提供這些,但是如果在介面部分自訂了執行個體變數,那麼將以自訂的為準,系統不會產生執行個體變數。

文法:採用@property關鍵字,並且@property不是變數,是方法。

命名:屬性名稱不加底線,只有執行個體變數才有底線。

屬性是一對setter和getter方法,屬性類型是setter方法中的參數類型,是getter方法中的傳回值類型。

特性:

1.讀寫性(readonly,readwrite,setter =,getter =)

   readonly:唯讀狀態,通知編譯器,屬性只產生getter方法,不產生setter方法。

   readwrite:讀寫狀態,通知編譯器,屬性既產生setter方法,也產生getter方法。

   setter =/getter =:方法重新命名。setter = set://getter = get:。

2.原子性(atomic,nonatomic)

   atomic:原子性。預設修飾符,保證了執行個體變數在多線程情況下訪問是安全的,  通過不斷加鎖解鎖實現在同一時刻執行個體變數只能被一個線程訪問。但是不斷的加鎖解鎖會消耗大量的CPU效能。

   nonatomic:非原子性。與atomic相反。

3.語義(assign,retain,copy)

   語義不同,直接決定了屬性對應的setter,getter方法內部實現的不同。

   assign:修飾的屬性是非物件類型,並且assign是預設的語義特性。

   retain:所有物件類型的屬性,都可以用retain來修飾。

   copy:也是用來修飾物件類型的屬性,但是一定要保證代表屬性類型的這個類必須接收了NSCopying,而且實現了copyWithZone:方法。字串通常用copy來修飾。

   語義特性涉及到了OC裡記憶體管理的知識。先上代碼:

 1 @synthesize height = _height; 2 - (void)setHeight:(CGFloat)height 3 { 4     _height = height; 5 } 6 - (CGFloat)height 7 { 8     return _height; 9 }10 @synthesize school = _school;11 - (void)setSchool:(NSString *)school12 {13     if (_school != school)14     {15         [_school release];16         _school = [school retain];17     }18 }19 - (NSString *)school20 {21     return [[_school retain] autorelease];22 }23 @synthesize major = _major;24 - (void)setMajor:(NSString *)major25 {26     if (_major != major)27     {28         [_major release];29         _major = [major copy];30     }31 }32 - (NSString *)major33 {34     return [[_major retain] autorelease];35 }

可以發現school屬性和major屬性與平時看到的setter和getter方法不一樣,這是因為school和major是NSString類型,即物件類型,所以用retain或者copy語義修飾,因此需要這樣去寫,具體的記憶體管理知識在後面詳細記錄。

另外需要注意的是,如果沒有@synthensize對屬性的實現,還重寫了setter和getter方法,那麼就不會產生相對應的執行個體變數。換句話,如果重寫了setter和getter,必須用@synthensize實現屬性,這樣才能產生執行個體變數。

點文法

如果接觸過其他的OOP語言,對這個點文法應該很熟悉,點文法就是屬性的另一種調用方式,前面一直用getter去訪問屬性,其實可以直接通過對象名.屬性名稱的方式來訪問。

 

【Objective-C學習記錄】第二十一天

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.