iOS中arc的設(shè)置與使用

舊工程配置arc方案:

1,直接在targets->build phases中修改compiler Flags,是否支持arc七咧。添加:-fobjc-arc炫贤,就可以讓舊項(xiàng)目支持arc清女。如果想讓原來支持arc的不使用arc則添加-fno-objc-arc

2,因?yàn)樵赽uild phases中可以改變是否支持arc舒岸,所以應(yīng)該在代碼中添加判斷是否支持arc吟榴,這樣不管以后.m的arc是否改變郊楣,都不用再次調(diào)整代碼。

下面是一個.h文件(附件中也上傳了.h)摔刁,整合了arc的各種屬性挥转、release判斷,直接#import在你想使用arc的類中即可。

#ifndef paixiu_PXISARC_h

#define paixiu_PXISARC_h

#ifndef PX_STRONG

#if __has_feature(objc_arc)

#define PX_STRONG strong

#else

#define PX_STRONG retain

#endif

#endif

#ifndef PX_WEAK

#if __has_feature(objc_arc_weak)

#define PX_WEAK weak

#elif __has_feature(objc_arc)

#define PX_WEAK unsafe_unretained

#else

#define PX_WEAK assign

#endif

#endif

#if __has_feature(objc_arc)

#define PX_AUTORELEASE(expression) expression

#define PX_RELEASE(expression) expression

#define PX_RETAIN(expression) expression

#else

#define PX_AUTORELEASE(expression) [expression autorelease]

#define PX_RELEASE(expression) [expression release]

#define PX_RETAIN(expression) [expression retain]

#endif

#endif

說明:在arc中绑谣,strong對應(yīng)原來的retain與copy准潭,weak對應(yīng)原來的assign。

EX:舉例使用autorelease:

NSArray *testArray = PX_AUTORELEASE([[NSArray alloc] init]);

//如果支持arc域仇,testArray就只是alloc init刑然,release的事情由系統(tǒng)來做。

//如果不支持arc暇务,那這條語句相當(dāng)于:

NSArray *testArray = [[[NSArray alloc] init] autorelease];

這樣不管以后改不改arc泼掠,都不會內(nèi)存泄漏了 .

所以,arc的使用有兩點(diǎn):

A:在build phases中修改compiler Flags值垦细。

B:在代碼中判斷是否支持arc择镇,包括對屬性(property)、釋放(release)的判斷括改。

3,在dealloc中需要這樣做:

類如果注冊了通知(觀察者模式)腻豌,需要remove掉。這個不管是否支持arc嘱能,都必須要做的吝梅。

- (void)dealloc {

[[NSNotificationCenterdefaultCenter] removeObserver:self];//如果注冊了通知的話。

[self removeObserver:self forKeyPath:keyPath];//如果注冊了kvo的話惹骂。

#if !__has_feature(objc_arc)? //在這里也需要判斷是否支持arc苏携,支持的話就執(zhí)行舊工程中該release的語句.

[array release]; //array代表alloc但沒有autorelease的變量

[super dealloc];

#endif

}

4,另外加點(diǎn)block的判斷对粪,這個是在4.0以后有的右冻,當(dāng)然也可以不進(jìn)行判斷,因?yàn)楝F(xiàn)在大多數(shù)都4.0以后了著拭。

#if NS_BLOCKS_AVAILABLE

#endif

總結(jié):

1,arc的設(shè)置是在build phases中修改compiler Flags的值纱扭。

2,如果使用了arc,在你的代碼中不可以使用retain, release, autorelease儡遮,如果使用的話會報錯乳蛾。

3,如果使用了arc,在@property聲明中峦萎,用strong和weak代替相應(yīng)的retain,copy,和assign屡久。3,如果使用了arc忆首,在@property聲明中爱榔,用strong代替retain。在支持

__unsafe_unretained的情況下糙及,

__unsafe_unretained相當(dāng)于assign详幽。

4,如果使用了arc,NSAutoReleasePool也不能使用,測試發(fā)現(xiàn)唇聘,用@autoreleasepool 代替版姑,不會編譯報錯。

總之迟郎,一切你之前“背過”的那幾條內(nèi)存管理規(guī)則剥险,你都不用去管了。而且宪肖,個人感覺表制,用arc代碼清晰很多,而且效率也提高了些控乾。

——————————————————————————————————

對于arc屬性可能寫的不太清楚么介,這里附加點(diǎn):

1,不管在不在arc下蜕衡,object對象都有強(qiáng)引用壤短、弱引用之分,當(dāng)需要保持(擁有)其他對象的時候慨仿,需要retain久脯。

2,在arc中镰吆,使用strong桶现、weak修飾的變量,當(dāng)對象不再存在的時候會被置為nil鼎姊。而[align=-webkit-left]__unsafe_unretained不會被置為nil骡和,會成為野指針,是不安全的,再次訪問可能造成錯誤相寇。

轉(zhuǎn)自:http://www.cocoachina.com/bbs/read.PHP?tid=122591

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末慰于,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子唤衫,更是在濱河造成了極大的恐慌婆赠,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件佳励,死亡現(xiàn)場離奇詭異休里,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)赃承,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進(jìn)店門妙黍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瞧剖,你說我怎么就攤上這事拭嫁】擅猓” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵做粤,是天一觀的道長浇借。 經(jīng)常有香客問我,道長怕品,這世上最難降的妖魔是什么妇垢? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮肉康,結(jié)果婚禮上修己,老公的妹妹穿的比我還像新娘。我一直安慰自己迎罗,他們只是感情好睬愤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著纹安,像睡著了一般尤辱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厢岂,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天光督,我揣著相機(jī)與錄音,去河邊找鬼塔粒。 笑死结借,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的卒茬。 我是一名探鬼主播船老,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼圃酵!你這毒婦竟也來了柳畔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤郭赐,失蹤者是張志新(化名)和其女友劉穎薪韩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捌锭,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俘陷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了观谦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拉盾。...
    茶點(diǎn)故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖坎匿,靈堂內(nèi)的尸體忽然破棺而出盾剩,到底是詐尸還是另有隱情雷激,我是刑警寧澤替蔬,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布告私,位于F島的核電站,受9級特大地震影響承桥,放射性物質(zhì)發(fā)生泄漏驻粟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一凶异、第九天 我趴在偏房一處隱蔽的房頂上張望蜀撑。 院中可真熱鬧,春花似錦剩彬、人聲如沸酷麦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沃饶。三九已至,卻和暖如春轻黑,著一層夾襖步出監(jiān)牢的瞬間糊肤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工氓鄙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留馆揉,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓抖拦,卻偏偏與公主長得像升酣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子态罪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容