2010-12-01 25 views
3

在ViewControllers之間傳遞NSManagedObjects是一個壞主意?我有一個iPad應用程序,我似乎遇到隨機訪問崩潰和sigbart錯誤。在ViewControllers之間傳遞NSManagedObjects - 隨機訪問錯誤

這些NSManageObjects來自CoreData,我想知道他們是否有時會因爲內存不足而導致這種情況。我希望將它們從控制器傳遞給控制器​​,以避免在每個視圖控制器上執行取指操作。

回答

6

聽起來這是一個壞的對象內存分配的做法。只要你沒有多線程你的應用程序,並且只有一個managedObjectContext(典型),你可以在VeiwControllers之間傳遞這些NSManagedObjects沒有問題。

可能發生的事情是,您將引用從一個ViewController傳遞到另一個ViewController,而不會使用retain消息增加它的引用。這可能會變得危險。

我建議你正對你的ViewControllers一個保留財產,像

@property (nonatomic, retain) NSManagedObject *yourObject; 

然後,當你得到你的管理對象,保持這樣的:

self.yourObject = ...; 

...當你想把它傳遞給另一個視圖控制器:

otherViewController.yourObject = ...; 

它會照顧設置零售in/release for you。

+0

我將MBProgressHUD添加到我的應用程序中,因此添加了多線程 - 謝謝我甚至沒有考慮過這個問題。 – Slee 2010-12-02 02:57:13

2

聽起來像你沒有遵循正確的內存管理語義。您可能想要閱讀Memory Management Programming Guide。如果你遵循正確的內存管理規則,那麼根本就沒有理由不安全。你不能在線程之間傳遞NSManagedObjects,但只要你始終與上下文在同一個線程上(對於視圖控制器來說就是主線程),那麼應該沒有問題。

1

只要確保在傳遞給新視圖控制器時不保留NSManagedObject上下文。對付它的最好方法是簡單地訪問managedObjectContext的AppDelegate的情況下,使用

[[[UIApplication sharedApplication] delegate] managedObjectContext]; 

如果分配這一個屬性,再次,不使用retain,你應該罰款內存管理。

相關問題