中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS開發OC基礎:OC屬性的一些概念和基本使用

發布時間:2020-07-03 21:00:26 來源:網絡 閱讀:1367 作者:winann 欄目:移動開發

一、屬性簡介

//屬性是OC2.0之后新出的一種語法,能讓我們快速的生成setter以及getter方法,大大簡化代碼


二、如何定義一個屬性

//@property 屬性關鍵字,用來定義屬性

//NSString * 屬性的類型

//name 屬性的名字。

//@property 只是生成的setter以及getter方法的聲明。
@property NSString *name;


三、屬性的使用注意事項
//如果在.m文件中我們自己實現了setter以及getter方法,則編譯器就不會再幫我們生成settergetter方法,并且也不會自動生成帶下劃線的實例變量。 //@synthesize 當給屬性名指定實例變量時,先去查找對于該類有沒有定義該實例變量,如果定義了,就直接使用,如果沒有定義,就自動生成一個指定的實例變量,

//切記,自動生成的實例變量是私有的,子類不可訪問。

//如果實例變量想讓子類訪問,就必須在.h文件中定義。

//@synthesize 用來setter 以及 getter方法的實現//name 屬性名 = 實例變量名

//告訴編譯器,在自動生成setter以及getter方法的內部實現時,所操作的實例變量是哪一個

//@synthesize屬性名不指定所要操作的實例變量名時,自動生成的實例變量和屬性名相同//如果連@synthesize都省略的話,編譯器自動生成的實例變量名就是 下劃線 + 屬性名。

//@synthesize name = _name, sex = _sex, age = _age, weight = _weight;



四、屬性的特性:

1.讀寫特性:

//  (1)readonly (只讀)告訴編譯器只生成getter方法,不生成setter方法。

//  (2)readwrite (既可讀,又可寫)既生成getter方法,也生成setter方法,默認是readwrite

//  (3)getter = 方法名,告訴編譯器在生成getter方法時,方法名為指定的方法名,如果沒有指定,默認的getter方法的方法名和屬性相同

//  (4)setter = 方法名,告訴編譯器在生成setter方法時,方法名為指定的方法名,如果沒有指定,默認的setter方法的方法名為 set + 屬性名(第一個字母大寫)

2.原子特性:

//  (1)atomic 原子性,會保證線程安全,也就是說同一時間內只能有一個線程在訪問,有一個加鎖的過程,該線程訪問結束之后,有一個解鎖的過程,默認的原子特性是atomic

//  (2)nonatomic 非原子性,不保證線程安全,但是效率要比atomic高很多,一般情況下使用沒有問題,因為我們在使用settergetter方法時,有時可能特別頻繁,使用atomic會嚴重影響操作的效率,所以蘋果官方推薦對于原子特性建議使用nonatomic.

3.語義特性

//  (1)assign (默認) 簡單的賦值,主要針對于基本的數據類型,有時也可針對于對象類型;

//  (2)retain 該語義特性 會對內存的引用計數加 1,針對于對象類型(只能適用于對象)

//  (3)copy 該語義特性會將對象拷貝一份,然后對新的對象持有所有權,只針對于對象


五、不同語意特性的setter和getter方法的系統內部實現(我們只要了解即可)
如果屬性的語義特性聲明為assign,則內部生成的setter方法為:

//- (void)setName:(NSString *)name {

//    _name = name;

//}


//getter 方法

//- (NSString *)name {

//    return _name;

//} 



//如果屬性的語義特性聲明為retain,則內部生成的setter方法為:

//- (void)setName:(NSString *)name {

//    if (_name != name) {

//        [_name release];

//        _name = [name retain];

//    }

//}


//getter

//- (NSString *)name {

//    return [[_name retain] autorelease];

//} 


//如果屬性的語義特性聲明為copy,則內部生成的setter方法為:

//- (void)setName:(NSString *)name {

//    if (_name != name) {

//        [_name release];

//        _name = [name copy];

//    }

//}


//getter 方法

//- (NSString *)name {

//    return [[_name retain] autorelease];

//}

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宾川县| 新安县| 闽侯县| 溧阳市| 雷山县| 宜川县| 合水县| 文成县| 宜丰县| 鄢陵县| 嘉定区| 呼玛县| 新晃| 琼结县| 武强县| 称多县| 呈贡县| 丰县| 乐山市| 公主岭市| 汝南县| 荃湾区| 泰宁县| 阳信县| 安化县| 永川市| 德阳市| 丰都县| 咸宁市| 宁阳县| 东乌珠穆沁旗| 郁南县| 郯城县| 清水河县| 阿巴嘎旗| 康乐县| 改则县| 南川市| 湖州市| 沾益县| 嘉荫县|