我是一个对象ImageURLObject
,这个对象有属性objectUrlImage
,当我创建这个对象时,属性objectUrlImage
是 nil,因为图像 url 还没有设置,当属性有实际值时如何执行选择器?这不是一种方法[self performSelector: withObject: afterDelay:]
,因为我不知道什么延迟属性变得不为零。
问问题
373 次
2 回答
3
您可以使用键值观察(KVO) 来检测对象属性的更改。
在 setter 中,ImageURLObject
您需要使用willChangeValueForKey
and执行通知didChangeValueForKey
:
- (void)setObjectUrlImage:(NSURL *)url
{
[self willChangeValueForKey:@"objectUrlImage"];
_objectUrlImage = url;
[self didChangeValueForKey:@"objectUrlImage"];
}
并从您想要的任何地方建立对该属性的观察:
[imageUrlObject addObserver:self
forKeyPath:@"objectUrlImage"
options:NSKeyValueObservingOptionNew
context:NULL];
并通过以下方式通知观察结果:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if (object == imageUrlObject && [keyPath isEqualToString:@"objectUrlImage"])
{
// URL changed
}
}
不要忘记在观察者的dealloc
方法中去掉对属性的观察:
- (void)dealloc
{
[imageUrlObject removeObserver:self
forKeyPath:@"ObjectUrlImage"];
}
(请注意,这是dealloc
在 ARC 环境中进行子类化的少数原因之一)。
于 2013-06-07T11:23:21.677 回答
0
你的问题不清楚。但如果我做对了,你应该在属性的设置器中做你想做的事。
- (void)setObjectUrlImage:(UrlImage *)objectUrlImage {
_objectUrlImage = objectUrlImage;
// Do something here, e.g. post notification, send a message to a delegate...
}
于 2013-06-07T11:11:39.830 回答