2012-09-12 70 views
0

親愛的同學iOS開發,分配分配對象以保留屬性的最佳做法是什麼?

我沒有ARC(開關即將推出),並用iOS的初學者一個有趣的討論後,仍處於發展階段,我介紹我的方式來初始化保留屬性(我們稱之爲property) ,我從蘋果文檔繼承他們的弧前時代:

NSObject *tmpProperty = [[NSObject alloc] init]; 
self.property = tmpProperty; 
[tmpProperty release]; 

我看到這是一個很大的好處:它使內存管理清晰。

還有一個很大的缺點:它需要3行,因爲非常基本。所以我們假設:爲什麼不是以下解決方案?

self.property = [[[NSObject alloc] init] autorelease]; 

這是內存管理不太清楚,但更緊湊(並propably使ARC-遷移更容易實現)。

什麼是(你?)你使用自己?你認爲其中的一個比另一個明顯更好嗎?

回答

0

使用自動釋放從來都不是一個很好的選擇,因爲你在你初始化對象的生命週期無法控制,所以它可能是

在一個視圖控制器已初始化例如一些物體的情況下屬性,並且您正在切換到其他視圖,並且如果您想要回到較舊的ViewController並訪問該對象,則可能會由iOS釋放該對象,並且您的應用程序可能會崩潰。

我認爲切換到ARC最早的將是您的最佳選擇。我認爲每個開發者都應該使用ARC,幾乎所有設備都由iOS5更新提供,因此支持較舊設備的可能性最小。

希望能夠解決您的疑問

+0

如果您正確地做到了objc中的內存管理是確定性的。使用autorelease不會改變這個 –

+0

你可以看看[Apple Docs](https://developer.apple。com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html#// apple_ref/doc/uid/20000043-1000922)用於使用autorelease的內存。 –

+0

我看不到任何地方提到autorelease應該避免 –

0

我正在使用第一個地方,因爲它使用更少的內存。在第二種情況下,當運行循環結束時,已分配的對象被釋放。當您在for循環或表格視圖單元格中使用此代碼時,這可能很重要。在某些情況下,這可能會導致「記憶警告」和「一切都很好」之間的區別。

順便說一下:切換到ARC。

0

有點。我認爲這是一個公約應該說「一個或另一個」的東西。

當您只需要一條線時,單線式工作正常。所有權不需要額外閱讀。

當您需要進一步初始化時(例如在您設置self.property之前),或者在某些情況下希望將對象添加到自動釋放池的可能性降至最低或其可銷燬的可能性更高時,您可能會贊成第二個。

但是,如果您即將轉入ARC,我不會擔心這一點 - 很多情況會隨之發生變化,您可能會在遷移後因爲額外的工作而無法獲得收益。

相關問題