@property和@synthesize可以自動生成某個類成員變數的訪問方法
readwrite:這個屬性是預設的情況,會自動為你生成訪問器
assign:這個屬性一般用來處理基礎型別,比如int、float等等,如果你宣告的屬性是基礎型別的話,assign是預設的,你可以不加這個屬性
natomic:預設是有該屬性的,這個屬性是為了保證程式在多執行緒情況,編譯器會自動生成一些互斥加鎖**,避免該變數的讀寫不同步問題
readonly:只生成getter不會有setter方法
copy:這個會自動生成你賦值物件的轉殖,相當於在記憶體中新生成了該物件的副本,這樣一來,改變賦值物件就不會改變你宣告的這個成員變數了
retain:會自動retain賦值物件
nonatomic:如果該物件無需考慮多執行緒的情況,**入這個屬性,這樣會讓編譯器少生成一些互斥加鎖**,可以提高效率
以上內容來自:
assign:指定setter方法用簡單的賦值,這是預設操作。你可以對標量型別(如int)使用這個屬性。你可以想象乙個float,它不是乙個物件,所以它不能retain、copy。
assign:簡單賦值,不更改索引計數(reference counting).使用assign: 對基礎資料型別 (nsinteger)和c資料型別(int, float, double, char,等)
retain:指定retain應該在後面的物件上呼叫,前乙個值傳送一條release訊息。你可以想象乙個nsstring例項,它是乙個物件,而且你可能想要retain它。
retain:釋放舊的物件,將舊物件的值賦予輸入物件,再提高輸入物件的索引計數為1 ,使用retain: 對其他nsobject和其子類 ,retain,是說明該屬性在賦值的時候,先release之前的值,然後再賦新值給屬性,引用再加1。
copy:指定應該使用物件的副本(深度複製),前乙個值傳送一條release訊息。基本上像retain,但是沒有增加引用計數,是分配一塊新的記憶體來放置它。copy是建立乙個新物件,retain是建立乙個指標,引用物件計數加1。copy:建立乙個索引計數為1的物件,然後釋放舊物件,copy是建立乙個新物件,retain是建立乙個指標,引用物件計數加1。
readonly:將只生成getter方法而不生成setter方法(getter方法沒有get字首)
。readwrite:預設屬性,將生成不帶額外引數的getter和setter方法(setter方法只有乙個引數)
。atomic:對於物件的預設屬性,就是setter/getter生成的方法是乙個原子操作。如果有多個執行緒同時呼叫setter的話,不會出現某乙個執行緒執行setter全部語句之前,另乙個執行緒開始執行setter的情況,相關於方法頭尾加了鎖一樣。
nonatomic:不保證setter/getter的原子性,多執行緒情況下資料可能會有問題。nonatomic,非原子性訪問,不加同步,多執行緒併發訪問會提高效能。先釋放原先變數,再將新變數 retain然後賦值;
注意,如果不加此屬性,則預設是兩個訪問方法都為原子型事務訪問。
以上內容來自:
面對這個問題我之前也含糊不清,隨著不斷地嘗試、看網上其他人的解答、**量的增加,大致總結以下內容。希望有所幫助。
成員變數是不與外界接觸的變數,應用於類的內部,如果你說那用@public外部不就是可以訪問了麼。簡單的說public只能適當使用,不要氾濫,否則就像你把鑰匙插在你自己家門上了。誰來都可以開門。毫無安全性。
由於成員變數的私有性,為了解決外部訪問的問題就有了屬性變數。屬性變數個人認為最大的好處就是讓其他物件訪問這個變數。而且你可以設定唯讀、可寫等等屬性,同時設定的方法我們也可以自己定義。記住一點,
屬性變數主要是用於與其他物件相互互動的變數。
如果對於上面所說還是含糊不清那就記住這幾點吧!
1.只有類內使用,屬性為private,那麼就定義成員變數。
2.如果你發現你需要的這個屬性需要是public的,那麼毫不猶豫就用屬性在.h中定義。
3.當你自己內部需要setter實現一些功能的時候,用屬性在.m中定義。
4.當你自己內部需要getter實現一些功能的時候,用屬性在.m中定義。
OC中類的屬性與成員變數的區別
先看一段 inte ce viewcontroller uiviewcontroller 屬性 property nonatomic,strong nsarray array2 end 成員變數,本例中的是例項成員變數,是作用於整個類物件內的。從生命週期來看,它比區域性變數要長一些,但它預設是私有的...
Category新增屬性與成員變數
category是objective c中常用的語法特性,通過它可以很方便的為已有的類來新增函式。但是category不允許為已有的類新增新的屬性或者成員變數。一種常見的辦法是通過runtime.h中objc getassociatedobject objc setassociatedobject來...
成員變數與屬性是不同的
成員變數 在類體的變數部分中定義的變數,也稱為字段 屬性 官方定義為屬性是指get或者set方法名 去掉get或者set後,把剩餘的部分首字母改為小寫後,即為這個類的屬性 例 public class test private string name public void setname stri...