国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

IOS開發之@property的詳細介紹

2020-07-26 02:41:58
字體:
來源:轉載
供稿:網友

IOS開發之@property的詳細介紹

在類中定義屬性時,總會使用到@property進行定義,下面就來說說@property的使用。

在使用過程中,如果需求公開且在其他類中使用時,通常會定義在.h頭文件中;而如果只是該類自已需要使用,這時則會定義

在.m實現文件中。

使用格式

@property (參數1, 參數2, 參數3, ...) 參數類型 參數名稱

參數包括三個種類,七個屬性,如下圖所示。 

在使用過程中,有幾點需要注意:

(1)原子性定義中,如果沒有涉及到多線程環境時,通常不會使用默認值atomic;
(2)讀寫屬性通過采用默認值readwrite;
(3)set方法處理時,需要針對不同的類型使用參數,而不是全都使用默認值;
(4)set方法處理時,對于非對象參數類型,即基本數據類型,如int/float/double/BOOL等類型時,采用assign;
(5)set方法處理時,對于對象參數類型,如NSString/NSNumber/NSArray/…/NSDictionary等類型時,采用retain/copy;
(6)在使用過程中,定義某個屬性后,系統會自動生成setter/getter方法,但程序員可以根據需要修改setter/getter方法;
(7)同時會生成同名帶下劃線的成員變量,并在setter/getter方法中使用。

如,定義一個Person類的姓名、年齡:

使用默認值進行定義

@property age;

相當于

@property (atomic, assign) int age;

通過采用非原子性的,即

@property (nonatomic, assign) int age;

對象類型的定義不能使用如下方式,因為該形式定義時,是直接進行賦值,會造成內存泄露。

@property (nonatomic, assign) NSString *name;

正確的方式應該使用retain/copy進行定義

@property (nonatomic, retain) NSString *name;

默認生成的setter/getter方法分別是

- (void)setAge:(int)age;- (int)age;
- (void)setName:(NSString *)name;- (NSString *)name;

如果在定義時,重新定義了setter/getter方法,則系統默認分成的setter/getter方法則無效了,使用時,需要調用新定義的

@property (nonatomic, retain, setter = setMyName:, getter = getMyName) NSString *name;

此時,使用時setter/getter方法為

- (void)setMyName:(NSString *)myName;- (NSString *)getMyName;

早期的Xcode版本中,@property 還會結合 @systhesize 來使用才會生成setter/getter方法,如

@property (nonatomic, assing) int age;
@systhesize age;// 或@systhesize age = _age;

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 迭部县| 荃湾区| 岫岩| 奎屯市| 重庆市| 高淳县| 商洛市| 丰原市| 清丰县| 香港| 郧西县| 岳西县| 兴安县| 纳雍县| 鄄城县| 吉隆县| 房产| 河津市| 九台市| 临潭县| 龙胜| 犍为县| 岳西县| 神农架林区| 阿拉尔市| 伊宁市| 宿州市| 内江市| 宜州市| 互助| 政和县| 赞皇县| 永康市| 鄢陵县| 赣榆县| 农安县| 宁德市| 惠州市| 同心县| 浦城县| 镇平县|