iOS 開發中成員變量與屬性的區別

最近看了多好關于實例變量 跟屬性的一些資料,在這里做一些簡單的總結,下面我們直接進入正題.

一. 成員變量

1.成員變量的作用范圍:

@public:在任何地方都能直接訪問對象的成員變量
@private:只能在當前類的對象方法中直接訪問,如果子類要訪問需要調用父類的get/set方法
@protected:可以在當前類及其子類對象方法中直接訪問(系統默認下是用它來修飾的)
@package:在同一個包下就可以直接訪問,比如說在同一個框架

2.注意:

無論父類是在@interface還是@implementation聲明的成員變量子類都能擁有;但是子類能不能直接通過變量名來訪問父類中定義的成員變量是需要看父類中定義的成員變量是由什么修飾符來修飾的。

3.默認:

在.m中成員變量的修飾符為@private.
在.h中成員變量的修飾符@protected.

  • 下面給大家演示下代碼:
創建一個學生類,然后分別在.h跟.m中聲明4中不同的類型的變量,創建一個MidStudent來繼承Student
  • 我們在MidStudent中來調用下看看這些變量哪些可以訪問哪些不可以:


    有圖可以看出,我們在.m里面聲明的變量子類是無法訪問的(即使給他@public),也會被認為是@private,所以我們的對外屬性都會放到.h去聲明,然而由于six變量是@private,所以子類還是無法訪問的
  • 我們再去外部去調用下MidStudent 對象 看看是什么效果


    由于我們沒有在Student或他的子類里面,所以只能訪問.h中@public修飾的變量,也就是name,由于age是@protrcted在外部是不能被訪問的!

二. 屬性

關于屬性的詳細說明我就不在這里做過多的說明了,請查詢下面的網址:
Objective-C 編程語言官網文檔(五)-屬性的聲明

  • 關于@synthesize object = _object 的解釋
    我們可能見過很多地方都有這樣的代碼:
1.@property的作用是定義屬性,聲明getter,setter方法。(注意:屬性不是變量) 2.@synthesize的作用是實現屬性的,如getter,setter方法 3.總結:一定要分清屬性和變量的區別,不能混淆。@synthesize 聲明的屬性=變量。意思是,將屬性的setter,getter方法,作用于這個變量。 4.但Xocde4.5以后,編譯器會為你自動實現setter及getter方法,如果他找不到_father,會為你自動創建一個_father的變量
  • 聲明屬性的時候會有一些關鍵詞這里簡單說下他們的含義:
atomic: 原子性

在objective-c 屬性設置里面 默認的就是atomic ,意思就是 setter /getter函數是一個原子操作,如果多線程同時調用setter時,不會出現某一個線程執行完setter所有語句之前,另一個線程就開始執行setter,相當于 函數頭尾加了鎖 . 這樣的話 并發訪問性能會比較低 .

nonatomic: 非原子性

非原子操作 一般不需要多線程支持的時候就用它,這樣在 并發訪問的時候效率會比較高 . 在objective-c里面通常對象類型都應該聲明為非原子性的. iOS中程序啟動的時候系統只會自動生成一個單一的主線程.程序在執行的時候一般情況下是在同一個線程里面對一個屬性進行操作.

getter=getterName

指定 get 方法,并需要實現這個方法 。必須返回與聲明類型相同的變量,沒有參數.相當于重新命名getter方法

setter=setterName:

指定 set 方法,并需要實現這個方法 。帶一個與聲明類型相同的參數,沒有返回值(返回空值)

當聲明為 readonly 的時候,不能指定 set 方法


重新聲明setter,getter方法
readwirte

如果沒有聲明成 readonly ,那就 默認是 readwrite ??梢杂脕碣x值,執行set方法

readonly

不可以被賦值

assgin

通常用于標量(簡單變量 int , float , CGRect 等)
一種典型情況是用在對對象沒有所有權的時候,通常是 delegate ,避免造成死循環(如果用 retain 的話會死循環)

strong

釋放舊對象 將舊對象的值賦予輸入對象 ,再提高輸入對象的索引計數為 1 ,常使用在繼承自 NSObject 的類。(MRC為retain)

weak

weak 不增加對對象的引用計數,也不持有對象,因此不能決定對象的釋放。它比 assign 多了一個功能,當對象消失后自動把指針變成 nil

copy

建立一個索引計數為 1 的對象 然后釋放舊對象 對 NSString 它指出 ,在賦值時使用傳入值的一份拷貝 ,拷貝工作由 copy 方法執行,此屬性只對那些實行了 NSCopying 協議的對象類型有效。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容