好的,ivar存储对所有者的引用?

时间:2013-03-06 15:25:03

标签: ios objective-c xcode

我有一个视图控制器需要其中一个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

3 个答案:

答案 0 :(得分:4)

当2个对象具有相互强引用时会创建保留循环 - 所以它们永远不会被释放(因此你会得到内存泄漏),除非你手动打破循环(例如,如果合适的话,在viewWillDisappear上将myObject属性设置为nil )。

更好的方法是“子”对象对其“所有者”的弱引用,所以你根本不会保留循环:

@interface MyObject : NSObject

@property (weak, nonatomic) id myOwner;

@end

答案 1 :(得分:1)

是的,但您想考虑将属性声明更改为:

@property ( weak, nonatomic ) id myOwner;

这样可以避免可能的retain cycle

答案 2 :(得分:0)

一个块也可以做到这一点。