十 oc中 property引數的學習

2021-06-29 03:06:37 字數 2263 閱讀 1255

------- windows phone 7手機開發、.ios培訓、期待與您交流! -------

在前面寫的部落格中也寫到過@property,但是那時候寫的是最簡單的一種形式,也就是說當我們給乙個非oc物件設計setter與getter方法,例如給基本資料型別int、double、enum、struct設定setter與getter方法。可以寫成@property int age。但是今天這篇部落格,主要想寫一些關於給oc物件設定setter與getter方法時如何寫@property以及@property中的一些引數。

在寫@propety之前,我們先得明白哪些是oc物件哪些是非oc物件。一般來說基本資料型別,例如int、double、char、enum、struct等是非oc物件。一般使用組合關係的,例如car *_car,這個物件放在某個類中,那麼這個*_car是屬於oc物件。注意nsstring *_name,也是屬於oc物件。知道這個後,我們可以開始寫@property了。

例如:

main函式:

#import #import "student.h"

#import "pen.h"

int main()

student類的宣告與實現:

#import #import "pen.h"

@inte***ce student : nsobject

@property (nonatomic,assign,readwrite) int age;

@property (nonatomic,retain,readwrite) nsstring *name;

@property (nonatomic,assign,readwrite,getter = isrich) bool rich;

// @property (nonatomic,retain,readwrite) pen *pen; // 這條語句的詳細寫法的宣告如下:

- (void)setpen:(pen *)pen;

- (pen *)pen;

@end

#import "student.h"

@implementation student

// @property (nonatomic,retain,readwrite) pen *pen; 這條語句詳細寫法的的實現如下:

- (void)setpen:(pen *)pen

}- (pen *)pen

- (void)dealloc

@end

pen類的宣告與實現:

#import @inte***ce pen : nsobject

@end

#import "pen.h"

@implementation pen

- (void)dealloc

執行的結果為:

@property引數總結:

一、記憶體管理相關的引數

retain : release使舊值計數器減1,retain使新值計數器加1

assign :直接賦值(這是預設的,適用於非oc物件型別,例如基本資料型別,列舉、結構體也屬於基本資料型別)

copy : release使舊值計數器減1,copy使新值計數器加1

上面這三個引數只能寫乙個,不能寫成(retain,copy);

二、是否要生成set方法

readwrite:同時生成setter與getter的宣告和實現(這個是預設)

readonly:只會生成getter的宣告、實現

注意:setter方法為可讀可寫方法,getter方法為唯讀方法 ,讀(檔案->記憶體)寫(記憶體—>檔案)

三、多執行緒管理

nonatomic :效能高,(一般寫**時,都需要加上這個)

atomic    : 效能低(預設的)

四、setter和getter方法的名稱(無所謂的預設值,可寫可不寫)

setter : 決定了setter方法的名稱,一定要有個冒號:

getter : 決定了getter方法的名稱(一般用在bool型別,將bool型別的getter方法改為isxx)

IOS開發 OC語言 property引數

檔名 person.h import 1.set方法記憶體管理相關的引數 retain release舊值,retain新值 適用於oc物件型別 assign 直接賦值 預設,適用於非oc物件型別 copy release舊值,copy新值 2.是否要生成set方法 readwrite 同時生成se...

OC中 property的所有屬性

1,assign 簡單賦值,不更改索引計數 假設你用malloc分配了一塊記憶體,並且把它的位址賦值給了指標a,後來你希望指標b也共享這塊記憶體,於是你又把a賦值給 assign 了b。此時a 和b指向同一塊記憶體,請問當a不再需要這塊記憶體,能否直接釋放它?答案是否定的,因為a並不知道b是否還在使...

OC中 property的所有屬性詳解

1,assign 簡單賦值,不更改索引計數 假設你用malloc分配了一塊記憶體,並且把它的位址賦值給了指標a,後來你希望指標b也共享這塊記憶體,於是你又把a賦值給 assign 了b。此時a 和b指向同一塊記憶體,請問當a不再需要這塊記憶體,能否直接釋放它?答案是否定的,因為a並不知道b是否還在使...