iOS - 使用KVO跟踪对象实例

时间:2016-07-27 12:55:02

标签: ios objective-c key-value-observing

是否可以跟踪对象的实例以检查它是否已分配并初始化或设置为nil?

我在.h文件中声明了对象,并尝试使用.m文件。

@interface ViewController : UIViewController

@property (nonatomic, strong) TestObject *testObj;

@end

然后我尝试了这个但是没有用。

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self addObserver:self forKeyPath:@"testObj" options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];

    _testObj = [[TestObject alloc] init];
}

2 个答案:

答案 0 :(得分:0)

试试这样:

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self addObserver:self forKeyPath:NSStringFromSelector(@selector(testObj)) options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];

    _testObj = [[TestObject alloc] init];
}

然后观察:

    -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{

        if ([keyPath isEqualToString:NSStringFromSelector(@selector(testObj))]) {
    //PERFORM YOUR OPERATIONS
    }
   }

答案 1 :(得分:0)

通过使用属性设置器来管理它。

所以,而不是:

_testObj = [[TestObject alloc] init];

我这样做了:

self.testObj = [[TestObject alloc] init];