嗨,我在ARC下有一个讨厌的内存管理问题,无法弄清楚如何解决它。问题就像这样,我有这些对象:
ObjectManager - 对核心数据执行fetchRequests并获取一个或多个NSManagedObjects的单例
UIViewControllerA - 一个视图控制器,其中有一个按钮“PassManagedObject”和一个声明如下的属性:
@property (strong, nonatomic) ManagedObject *objectForToday;
在UIViewControllerA 上的 viewDidLoad 中,我调用方法 refreshDailyObject 执行此操作:
self.objectForToday = nil;
self.objectForToday = [[ObjectManager sharedManager] getDailyObject];
如果我点击 PassManagedObject 按钮我创建UIViewControllerB ,传递 objectForToday 到它并显示,见下文
- (IBAction)passManagedObjectTapped:(id)sender {
UIViewControllerB *viewController = [[UIViewControllerB alloc] initWithNibName:@"UIViewControllerB"];
viewController.object = self.objectForToday;
[self.navigationController pushViewController:viewController animated:NO];
}
UIViewControllerB 有一个声明如下的属性:
@property (strong, nonatomic) ManagedObject *object;
和“后退”按钮执行此操作:
- (IBAction)backAction:(id)sender {
self.object = nil;
[self.navigationController popViewControllerAnimated:NO];
}
现在的问题是这个。如果我连续点击passManagedObjectTapped然后再点击backAction,再次传递ManagedObjectTapped并再次使用backAction,然后再次传递ManagedObjectTapped并自动执行此操作,我最终会收到内存警告1 ,然后崩溃。
仪器没有显示任何泄漏,但我的内存分配持续缓慢上升。
我在iOS4.3和iOS下使用 ARC iOS5的。我一直在努力弄清楚现在一天出了什么问题。任何帮助将受到高度赞赏。
谢谢!
答案 0 :(得分:5)
self.object = nil;和self.objectForToday = nil;没有必要 - ARC和合成的属性设置者已经处理过这个问题。
你似乎很可能在某个地方有一个循环引用。在任何情况下,对象A对对象B有强引用,对象B对对象A有强引用吗?
如果是这样,只需将其中一个引用更改为weak(或者如果要支持iOS 4.3,则分配)。