堆與棧的區(qū)別
一岩睁、堆棧空間分配區(qū)別:
1锐极、棧(操作系統(tǒng)):由操作系統(tǒng)自動(dòng)分配釋放 笙僚,存放函數(shù)的參數(shù)值,局部變量的值等灵再。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧肋层;
2、堆(操作系統(tǒng)): 一般由程序員分配釋放翎迁, 若程序員不釋放栋猖,程序結(jié)束時(shí)可能由OS回收,分配方式倒是類似于鏈表汪榔。
二蒲拉、堆棧緩存方式區(qū)別:
1、棧使用的是一級(jí)緩存, 他們通常都是被調(diào)用時(shí)處于存儲(chǔ)空間中雌团,調(diào)用完畢立即釋放燃领;
2、堆是存放在二級(jí)緩存中锦援,生命周期由虛擬機(jī)的垃圾回收算法來(lái)決定(并不是一旦成為孤兒對(duì)象就能被回收)猛蔽。所以調(diào)用這些對(duì)象的速度要相對(duì)來(lái)得低一些。
三灵寺、堆棧數(shù)據(jù)結(jié)構(gòu)區(qū)別:
堆(數(shù)據(jù)結(jié)構(gòu)):堆可以被看成是一棵樹曼库,如:堆排序;
棧(數(shù)據(jù)結(jié)構(gòu)):一種先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)略板。
instancetype和id的區(qū)別
區(qū)別1:
在ARC(Auto Reference Count)環(huán)境下:
instancetype用來(lái)在編譯期確定實(shí)例的類型,而使用id的話,編譯期不檢查類型, 運(yùn)行時(shí)檢查類型.
在MRC(Manual Reference Count)環(huán)境下:
instancetype和id一樣,不做具體類型檢查
區(qū)別2:
id可以作為方法的參數(shù),但instancetype不可以
instancetype只適用于初始化方法和便利構(gòu)造器的返回值類型
MRC與ARC的區(qū)別
ARC:自動(dòng)管理內(nèi)存計(jì)數(shù)器毁枯。不需要程序員管理內(nèi)存,編譯器會(huì)在恰當(dāng)?shù)臅r(shí)候給我們填上reatin叮称、release等代碼种玛。
注意:oc中的ARC和JAVa里面的垃圾回收機(jī)制不太一樣,Java中的垃圾回收機(jī)制是系統(tǒng)幫忙干的颅拦,而oc中的ARC是編譯器干的蒂誉。
ARC是編譯器特性(編譯器會(huì)在恰當(dāng)?shù)臅r(shí)候給我們填上reatin教藻、release等代碼)距帅,不是運(yùn)行時(shí)特性。
MRC:手動(dòng)管理內(nèi)存計(jì)數(shù)器括堤。需要程序要自己恰當(dāng)?shù)牡胤阶约簩懮蟫elease和retain代碼碌秸。
野指針和空指針的區(qū)別
野指針:表示指針指向了一個(gè)被釋放的對(duì)象,也稱“僵尸對(duì)象”悄窃。只要給野指針發(fā)送消息讥电,程序就會(huì)報(bào)錯(cuò)。
空指針:指向沒(méi)有儲(chǔ)存控件的指針(就是指針設(shè)置為nil)轧抗。我們一般為了避免給野指針發(fā)送消息恩敌,當(dāng)一個(gè)對(duì)象被釋放后我們都將這個(gè)對(duì)象的指針設(shè)置為空指針。給空指針發(fā)送消息不會(huì)報(bào)錯(cuò)
property修飾符
readonly:只讀的横媚,修飾的屬性只自動(dòng)生成getter方法
readwrite :可讀可寫的纠炮,修飾的屬性可以自動(dòng)生成getter/setter方法。默認(rèn)情況下是readwrite
retain:自動(dòng)幫我們生成getter/setter方法灯蝴,并且生成的是內(nèi)存管理代碼(引用計(jì)數(shù)器+1)恢口。
assign:不會(huì)自動(dòng)幫助我們?cè)趕etter/getter方法中生成內(nèi)存管理代碼,僅僅生成普通的getter與setter方法
getter:可以給getter方法起一個(gè)名字
setter:可以給setter方法起一個(gè)名字
atomic:原子性穷躁,性能比較低耕肩,安全性高。(只能執(zhí)行一條線程)
nonatomic:非原子性,性能比較高猿诸,安全性比較差 (可以同時(shí)進(jìn)行多條線程)
+(void)load和+(void)initialize的區(qū)別
+(void)load:表示程序開(kāi)始加載到內(nèi)存時(shí)調(diào)用? ? 2.自身未定義婚被,不會(huì)沿用父類的方法。3.類別中的定義全部執(zhí)行梳虽,先執(zhí)行類自身的實(shí)現(xiàn)摔寨,再執(zhí)行類別(Category)中的實(shí)現(xiàn)
+(void)initialize:便是該類第一次使用將被調(diào)用? 2.自身未定義,hui沿用父類的方法怖辆。3.類別中的定義是复,會(huì)執(zhí)行最后一個(gè),并且覆蓋類的方法
weak和strong assign
strong:強(qiáng)引用竖螃,用于OC對(duì)象淑廊,相當(dāng)于MRC中的reatin,引用計(jì)數(shù)器加1
weak:弱引用特咆,用于OC對(duì)象季惩,相當(dāng)于MRC中的assign,引用計(jì)數(shù)器不加1
assign:用于一般數(shù)據(jù)類型腻格,和MRC中的assign一樣画拾,引用計(jì)數(shù)器不加1