2013-05-30 00:35
54人閱讀收藏
舉報property
ioscopy
很多網友在學習objective - c的時候,都會對@property的使用方法感到困惑。但是呢,@property又是我們最常使用的以一種機制,很多人在抄寫ios程式設計實戰**時,對於「@property(strong,nonatomic),@property(weak,nonatomic)"完全搞不懂,只能長嘆:這是啥,這又是啥?由於市場上基礎教程的書對@property的屬性列表解釋很少,ios大腕又懶得詳細解釋,所以筆者將把屬性列表拆成若干個方面,用幾篇部落格分別解釋,以求朋友間的交流,指教。
@property (copy,nonatomic)
nsstring *name;
//括號裡的屬性列表沒有順序,可隨意修改
這條語句就等價於;
- (void) setname: (nsstring *) thename
} 那麼為什麼要使用copy呢,如果直接使用下面的語句,結果又將如何?
- (void) setname: (nsstring *) thename
結果是 name 和 thename 指向同乙個物件。當在呼叫 setname: 方法之後,如果 thename 的值被修改,那麼, name 的值也將被修改,這顯然不是我們想要的結果。所以,用用 copy 來拷貝 thename 的值到 name 上,其完成功能就是呼叫乙個 alloc 方法來建立乙個新的字串物件(使用 initwithstring:thename)。
也許有些朋友對這句話產生疑問:這顯然不是我們想要的結果,何以見得呢。因為這種結果,建立的字串占用的是同一堆記憶體空間。後果就是:如果乙個字串已經被乙個名稱所引用,則以後再有相同的字串宣告時,就不會重新開闢空間,而繼續使用開闢好的堆記憶體,也就是所謂的共享設計。對於初學者來說,還是採用建立乙個字串,就開闢乙個記憶體空間比較好。
那 nonatomic 又有神馬作用呢?在多執行緒程式中,兩個或多個執行緒可能在同乙個時間執行同乙個**,同乙個屬性。為了防止這種現象的發生,開發人員可以使用互斥鎖。nonatomic 的意思是不需要使用互斥鎖,atomic 是使用互斥鎖。objective - c 的預設選項是 atomic 。如果你的程式並沒有使用多執行緒,可以把互斥鎖設定為 nonatomic。
這是由於 nonatomic
ps: 本人正在學習ios6實戰開發,本身也是小白,上述博文多有不足之處,歡迎朋友們指正。也希望朋友們能多多交流,把自己程式設計的疑惑心得寫出來,大家共同進步嘛。在後續的日子,筆者會根據實戰開發中的錯誤,每天寫點心得的,請賜教!
IOS開的property要點總結
在.h檔案裡面宣告 property和在m類實現檔案里央使用 synthesize用於隱性實現對類成員變數的讀取。property涉及到的屬性值包括 atomic,nonatomic,readonly,readwrite,assign,retain,copy,getter,setter,另外還有強引...
ios開發中 property的屬性介紹
大家都知道 property和 synthesize可以自動生成某個類成員變數的訪問方法,但可能對property中的一些屬性不是很了解,網上的一些介紹有的不是很正確,感覺會誤導新手,於是準備詳細介紹一下property中的詳細屬性。先介紹一下預設的情況 readwrite 這個屬性是預設的情況,會...
iOS開發中 property的屬性介紹
property與 synthesize是成對出現的,可以自動生成某個類成員變數的訪問方法。在xcode4.5以及以後的版本,synthesize可以省略。1.atomic與nonatomic atomic 預設是有該屬性的,這個屬性是為了保證程式在多執行緒情況,編譯器會自動生成一些互斥加鎖 避免該...