ios初步修飾符簡介

2021-07-04 00:06:43 字數 2582 閱讀 3268

@property 修飾符

什麼情況使用 weak 關鍵字,相比 assign 有什麼不同?

怎麼用 copy 關鍵字?

這個寫法會出什麼問題:@property (copy) nsmutablearray *array?

如何讓自己的類用 copy 修飾符?如何重寫帶 copy 關鍵字的 setter?

@property 的本質是什麼?ivar、getter、setter 是如何生成並新增到這個類中的

@protocol 和 category 中如何使用 @property

runtime 如何實現 weak 屬性

1、讀寫性修飾符:readwrite | readonly

2、setter相關修飾符:assign | retain | copy

assign:表示直接賦值,用於基本資料型別(nsinteger和cgfloat)和c資料型別(如int, float, double, char等)另外還有id型別,這個修飾符不會牽涉到記憶體管理。但是如果是物件型別,使用此修飾符則可能會導致記憶體洩漏或exc_bad_access錯誤;

retain:針對物件型別進行記憶體管理。如果對基本資料型別使用,則xcode會直接報錯。當給物件型別使用此修飾符時,setter方法會先將舊的物件屬性release掉,再對新的物件進行一次賦值並進行一次retain操作;

copy:主要用在nsstring型別,表示複製內容;

系統預設屬性是assign。retain是指標的複製不重新分配記憶體空間,copy是內容的複製;

.原子性修飾符:atomic | nonatomic

atomic:表示是執行緒安全的。

nonatomic:表示是非執行緒安全的,使用此屬性效能會提高一些。

系統預設是atomic

4、 getter和setter修飾符

@property(getter = getmethodname, setter = setmethodname) object *obj;

這兩個屬性修飾符用於設定自定義生成的getter和setter方法名,使用之後將不再使用系統預設的setter和getter方法名;

在@property修飾符中可以出現多個修飾符,分別用逗號分隔,但是,在上述修飾符中,1,2,3組中的屬性分別之恩那個出現乙個,只有4中可以同時出現。

xcode4.2(ios sdk4.3和以下版本)和以前的版本用retain和assign

xcode4.3(ios 5和以上版本)或之後有了arc用strong和weak

assign:用於非指標變數。用於基礎資料型別(如nsinteger, cgfloat)和c資料型別(int, float, double, char等), 另外還有id型別。

記住:前面不需要加*的就用assign

retain:用於指標變數。一般用於字串(nsstring, nsmutablestring), 陣列(nsmutablearray, nsarray),字典物件,檢視物件(uiview),控制器物件(uiviewcontroller)等

strong類似於retain,weak類似於assign

最簡單的記憶:

使用assign:對基礎資料型別(如nsinteger, cgfloat)和c資料型別(int, float, double, char等), 另外還有id型別

使用copy:對nsstring型別

使用retain:對其它nsobject和其子類

1、在標頭檔案中用@property宣告乙個屬性名,編譯器會自動為我們轉換成這個屬性名的getter方法和setter方法。

2、在實現檔案中使用@synthesize propertyname,編譯器先會查詢這個屬性名的setter方法和getter方法有沒有被人為實現,如果已經實現,則不再實現,如果沒有,則會幫我們生成乙個屬性命的setter方法和getter方法。

3、當在實現檔案中使用了@synthesize propertyname,編譯器還會做一件事情,在類成員變數中查詢乙個名為_propertyname的成員變數,如果沒有,再繼續查詢名為propertyname的成員變數,如果這兩個都沒有,編譯器會自動為我們生成乙個私有的名為_propertyname的成員變數。注意,系統自動建立的都是私有的。

4、當在實現檔案中這樣寫@synthesize propertyname = varname;時,setter和getter方法所對應的是乙個名為varname的成員變數,修改和讀取的是varname成員變數的值。

5、當我們在實現檔案中不寫@synthesize propertyname時,在xcode 4.5之前的版本不會幫我們自動實現setter和getter方法,系統當然也不再會為我們生成對應的成員變數。但是在xcode 4.5之後可以不用寫@synthesize了,就跟3、4一樣了。

6、當我們既定義了@synthesize,又在實現檔案中人為重寫setter和getter方法時,那麼@synthesize將不再工作,也就不會為我們建立沒有定義的_propertyname成員變數了,這時候如果在setter和getter方法中呼叫_propertyname將會發生編譯錯誤

sealed修飾符簡介

sealed在修飾類時,表示密封,即該類不能繼承,不能和abstract 抽象類 同時使用,因為sealed和abstract的屬性相互排斥,abstract來修飾抽象類,需要繼承來實現功能。而在sealed修飾的類裡面的所有方法的virtual修飾符都無效。sealed修飾類的作用是防止濫用繼承,...

iOS 屬性修飾符

1.讀寫性修飾符 readwrite readonly readwrite 表明這個屬性是可讀可寫的,系統為我們建立這個屬性的setter和getter方法。readonly 表明這個屬性只能讀不能寫,系統只為我們建立乙個getter方法,不會建立setter方法 2.setter相關修飾符 ass...

修飾符 許可權修飾符

四種形式許可權修飾符的訪問情況 publicprotected不寫private 同乙個類中 四種都可以 同一包中的不同類 除了private剩下都可以 不同包下的子類 public protected 可以 不同包下的不同類 只有public可以 許可權修飾符 public protected 預...