我有一个视图控制器需要其中一个ivars在某个时刻调用它的方法。 ivar是否可以存储对其所有者的引用?这会导致任何问题吗?如果是这样,更好的方式?
// From MainViewController.h
#import <UIKit/UIKit.h>
#import "MyObject.h"
@interface MainViewController : UIViewController
@property (strong, nonatomic) MyObject *myObject;
@end
// From MyObject.h
#import <UIKit/UIKit.h>
@interface MyObject : NSObject
@property (strong, nonatomic) id myOwner;
@end
答案 0 :(得分:4)
当2个对象具有相互强引用时会创建保留循环 - 所以它们永远不会被释放(因此你会得到内存泄漏),除非你手动打破循环(例如,如果合适的话,在viewWillDisappear上将myObject属性设置为nil )。
更好的方法是“子”对象对其“所有者”的弱引用,所以你根本不会保留循环:
@interface MyObject : NSObject
@property (weak, nonatomic) id myOwner;
@end
答案 1 :(得分:1)
答案 2 :(得分:0)
一个块也可以做到这一点。