国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

ios--成員變量與屬性的區(qū)別

2019-11-09 18:53:28
字體:
供稿:網(wǎng)友

一. 成員變量

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

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

2.注意:

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

3.默認(rèn):

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

下面給大家演示下代碼:創(chuàng)建一個(gè)學(xué)生類,然后分別在.h跟.m中聲明4中不同的類型的變量,創(chuàng)建一個(gè)MidStudent來繼承Student我們在MidStudent中來調(diào)用下看看這些變量哪些可以訪問哪些不可以:有圖可以看出,我們在.m里面聲明的變量子類是無法訪問的(即使給他@public),也會(huì)被認(rèn)為是@private,所以我們的對外屬性都會(huì)放到.h去聲明,然而由于six變量是@private,所以子類還是無法訪問的我們再去外部去調(diào)用下MidStudent 對象 看看是什么效果由于我們沒有在Student或他的子類里面,所以只能訪問.h中@public修飾的變量,也就是name,由于age是@protrcted在外部是不能被訪問的!

二. 屬性

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

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

在objective-c 屬性設(shè)置里面 默認(rèn)的就是atomic ,意思就是 setter /getter函數(shù)是一個(gè)原子操作,如果多線程同時(shí)調(diào)用setter時(shí),不會(huì)出現(xiàn)某一個(gè)線程執(zhí)行完setter所有語句之前,另一個(gè)線程就開始執(zhí)行setter,相當(dāng)于 函數(shù)頭尾加了鎖 . 這樣的話 并發(fā)訪問性能會(huì)比較低 .

nonatomic: 非原子性

非原子操作 一般不需要多線程支持的時(shí)候就用它,這樣在 并發(fā)訪問的時(shí)候效率會(huì)比較高 . 在objective-c里面通常對象類型都應(yīng)該聲明為非原子性的. iOS中程序啟動(dòng)的時(shí)候系統(tǒng)只會(huì)自動(dòng)生成一個(gè)單一的主線程.程序在執(zhí)行的時(shí)候一般情況下是在同一個(gè)線程里面對一個(gè)屬性進(jìn)行操作.

getter=getterName

指定 get 方法,并需要實(shí)現(xiàn)這個(gè)方法 。必須返回與聲明類型相同的變量,沒有參數(shù).相當(dāng)于重新命名getter方法

setter=setterName:

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

當(dāng)聲明為 readonly 的時(shí)候,不能指定 set 方法

重新聲明setter,getter方法
readwirte

如果沒有聲明成 readonly ,那就 默認(rèn)是 readwrite 。可以用來賦值,執(zhí)行set方法

readonly

不可以被賦值

assgin

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

strong

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

weak

weak 不增加對對象的引用計(jì)數(shù),也不持有對象,因此不能決定對象的釋放。它比 assign 多了一個(gè)功能,當(dāng)對象消失后自動(dòng)把指針變成 nil

copy

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄山市| 宜丰县| 肇源县| 聂拉木县| 平江县| 休宁县| 西青区| 静宁县| 吴桥县| 拜城县| 尼木县| 河曲县| 灵丘县| 宝坻区| 威远县| 外汇| 香港| 泰安市| 洛阳市| 嵊泗县| 垣曲县| 南雄市| 阿鲁科尔沁旗| 南充市| 大渡口区| 沾化县| 土默特右旗| 宁夏| 秦皇岛市| 磴口县| 吉隆县| 卓资县| 双江| 电白县| 沅陵县| 巨鹿县| 高要市| 盐亭县| 平果县| 湘西| 故城县|