Ios 在UIView子类中注册KVO,got";观察信息泄漏“;警告

Ios 在UIView子类中注册KVO,got";观察信息泄漏“;警告,ios,objective-c,uiview,Ios,Objective C,Uiview,我正在尝试对UIView进行子类化,希望在其中添加更多子视图。由于我正在代码中更改视图的frame属性,因此我希望在调整此视图的大小时调整子视图的大小,因此我在我的initWithCoder:方法中添加了以下代码: [self addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil]; 在观察方法中,我将手动重置视图的帧。一切正常,但当我按下其他视图控制器并向后移动时,我收到以下

我正在尝试对UIView进行子类化,希望在其中添加更多子视图。由于我正在代码中更改视图的frame属性,因此我希望在调整此视图的大小时调整子视图的大小,因此我在我的
initWithCoder:
方法中添加了以下代码:

[self addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil];
在观察方法中,我将手动重置视图的帧。一切正常,但当我按下其他视图控制器并向后移动时,我收到以下消息:

Observation info was leaked, and may even become mistakenly attached to some other object.
那么,我怎样才能解决这个问题呢?我知道观察者肯定不会被移除,但是这里没有任何
viewdiddefine
的东西。我该怎么办


谢谢

您应该删除所有添加的观察者的观察者,因此请执行以下代码:

- (void)dealloc {

    [self removeObserver:self forKeyPath:@"frame" context:NULL];
}

我正在使用ARC,dealloc是否仍然是一个可能的选项?也许你可以将它放在“-(void)viewdiddefine:(BOOL)animated”方法中,并在-(void)viewdidappease:(BOOL)animatedARC中添加观察者,这一切都要感谢erik,“viewdiddefine:”方法在视图控制器中,我想,我可以在UIView中使用它吗?