使用ARC时,在视图之间正确传递NSManagedObjects?记忆警告和崩溃

Hor*_*hiv 3 memory-management core-data objective-c ios automatic-ref-counting

嗨,我在ARC下有一个令人讨厌的内存管理问题,无法弄清楚如何解决它.问题就像这样,我有这些对象:

ObjectManager - 对核心数据执行fetchRequests并获取一个或多个NSManagedObjects的单例

UIViewControllerA - 一个视图控制器,其中有一个按钮"PassManagedObject"和一个声明如下的属性:

@property (strong, nonatomic) ManagedObject *objectForToday;
Run Code Online (Sandbox Code Playgroud)

UIViewControllerA上的viewDidLoad中,我调用了方法refreshDailyObject,它执行此操作:

self.objectForToday = nil;
self.objectForToday  = [[ObjectManager sharedManager] getDailyObject];
Run Code Online (Sandbox Code Playgroud)

如果我挖掘PassManagedObject按钮I 创建UIViewControllerB,通过所述objectForToday它和显示它,见下文

- (IBAction)passManagedObjectTapped:(id)sender {
       UIViewControllerB *viewController = [[UIViewControllerB alloc] initWithNibName:@"UIViewControllerB"];
       viewController.object = self.objectForToday;
       [self.navigationController pushViewController:viewController animated:NO];
 }
Run Code Online (Sandbox Code Playgroud)

UIViewControllerB有一个声明如下的属性:

@property (strong, nonatomic) ManagedObject *object;
Run Code Online (Sandbox Code Playgroud)

和一个按钮" 后退 ",它执行此操作:

- (IBAction)backAction:(id)sender {
    self.object = nil;
    [self.navigationController popViewControllerAnimated:NO];
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是这个.如果我点击不断passManagedObjectTapped然后backAction,并再次passManagedObjectTapped又一次backAction,然后再passManagedObjectTapped和自动化这个我得到最终收到内存警告1,然后崩溃.

仪器没有显示任何泄漏,但我的内存分配持续缓慢上升.

我在iOS4.3和iOS5下使用ARC.我一直在努力弄清楚现在一天出了什么问题.任何帮助将受到高度赞赏.

谢谢!

Nic*_*ood 5

self.object = nil; 和self.objectForToday = nil; 没有必要 - ARC和合成的属性设置器已经处理好了.

你似乎很可能在某个地方有一个循环引用.您是否有任何情况,其中对象A具有对对象B的强引用,而对象B具有对对象A的强引用?

如果是这样,只需将其中一个引用更改为弱(或者如果要支持iOS 4.3则分配).