3 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個(gè)贊
因?yàn)橐婚_始我是用alloc聲明我的所有數(shù)組,如果在某個(gè)函數(shù)的末尾我返回了用alloc創(chuàng)建的數(shù)組,則我必須自動(dòng)釋放該數(shù)組,因?yàn)閮?nèi)存泄漏問題。現(xiàn)在使用第一個(gè)聲明,我不需要釋放任何內(nèi)容
當(dāng)您“出售”一個(gè)對(duì)象時(shí),這是完全正確的。但是在其他情況下,當(dāng)您在iOS上創(chuàng)建對(duì)象時(shí),可以在獲取現(xiàn)成的自動(dòng)釋放對(duì)象和調(diào)用alloc之后再釋放之間進(jìn)行選擇,Apple希望您使用alloc和release,因?yàn)檫@樣可以保持對(duì)象的生命周期短,由您控制。
這里的問題是,自動(dòng)釋放的對(duì)象駐留在自動(dòng)釋放池中,并且可能一直堆積到池耗盡為止。
需要注意的另一件事是循環(huán)。您可能會(huì)在不知不覺中生成自動(dòng)釋放的對(duì)象的情況下,它們只是堆積在池中。解決方案是在循環(huán)開始時(shí)創(chuàng)建自己的自動(dòng)釋放池,并在循環(huán)結(jié)束時(shí)釋放它,以便每次通過循環(huán)都釋放對(duì)象。
但是隨著iOS 5和ARC的到來,自動(dòng)釋放機(jī)制更加有效,并且沒有諸如之類的東西release
,因此alloc-init和出售自動(dòng)釋放對(duì)象的便利構(gòu)造函數(shù)之間的區(qū)別變得模擬。(現(xiàn)在它也是一個(gè)@autoreleasepool
塊,而不是一個(gè)自動(dòng)釋放池(偽)對(duì)象。)

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊
在array本身的類方法產(chǎn)生自動(dòng)釋放的數(shù)組,這意味著你不必(也不應(yīng)該)手動(dòng)釋放它
添加回答
舉報(bào)