1

我有一个视图控制器,它需要它的一个 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
4

3 回答 3

4

当 2 个对象彼此具有强引用时,这将创建保留循环 - 因此它们将永远不会被释放(因此您将获得内存泄漏),除非您手动中断循环(例如,如果合适,在 viewWillDisappear 上将 myObject 属性设置为 nil)。

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

@interface MyObject : NSObject

@property (weak, nonatomic) id myOwner;

@end
于 2013-03-06T15:29:57.637 回答
1

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

@property ( weak, nonatomic ) id myOwner;

这样可以避免可能的保留周期

于 2013-03-06T15:30:20.397 回答
0

一个块也可以解决问题。

于 2013-03-06T15:51:34.547 回答