我會說你需要非常關心。編程的第一條規則是用戶永遠不會做你期望的事情。
需要考慮的事情:
- 存取方法。使用它們。設置 屬性所有屬性和 始終與 適當的getter/setter方法訪問它們:
。
object.property = some_other_object; -OR-
[object setProperty:some_other_object];
和
object = some_other_object.some_property;
object = [some_other_object some_property];
抵制誘惑,做這樣的事情:
property = some_other_object;
[property retain];
- 你從得到ObjectAlloc中輸出? 有4個內存泄漏工具, 性能和對象分配。 他們全都沒有人加載?
- 當應用程序崩潰時,你會得到什麼? EXEC_BAD_ACCESS或其他一些錯誤?
- 平衡保留(無論是alloc還是 副本)和版本。用 相同的方法來保持每個分配/副本均衡 的釋放/自動釋放是一個好主意 。如果您使用您的 訪問器所有的時間,需要 做手動發佈很少。
- Autorelease經常會隱藏真正的 問題。有可能Autorelease 可以掩蓋一些棘手的分配 問題。仔細檢查您的使用 autorelease。
編輯(根據您的故障代碼添加) 根據您的上述「編程接收信號:0」的回答。這表示您的內存不足。我會通過尋找你的代碼確實是這樣情況下啓動:
myObject = [[MyClass alloc] init];
[someMutableArray addObject:myObject];
,你沒有「釋放」,當你把新的對象到數組。如果這個數組被釋放,那麼對象myObject將成爲一個孤兒,但無論如何都會在內存中存在。這樣做的簡單方法是grep所有的「alloc」/「copy」消息。除極少情況外,在同一功能中應該有一對「釋放」/「自動釋放」。通常情況下,上述應該是:
myObject = [[[MyClass alloc] init] autorelease];
[someMutableArray addObject:myObject];
它如何崩潰? –
「程序接收信號:0」 –