我有一个对象ImageURLObject
,这个对象有属性objectUrlImage
,当我创建这个对象属性objectUrlImage
是nil时,因为图像url还没有设置,我怎么能执行选择器当财产有实际价值?这不是一种方法[self performSelector: withObject: afterDelay:]
,因为我不知道什么延迟属性不是零...
答案 0 :(得分:3)
您可以使用Key-Value Observing(KVO)来检测对象属性的更改。
在ImageURLObject
的设置者中,您需要使用willChangeValueForKey
和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"];
}
(请注意,这是在ARC环境中继承dealloc
的几个原因之一)。
答案 1 :(得分:0)
你的问题不明确。但是,如果我做对了,你应该做你想要的财产的设定者。
- (void)setObjectUrlImage:(UrlImage *)objectUrlImage {
_objectUrlImage = objectUrlImage;
// Do something here, e.g. post notification, send a message to a delegate...
}