0

我是一个对象ImageURLObject,这个对象有属性objectUrlImage,当我创建这个对象时,属性objectUrlImage是 nil,因为图像 url 还没有设置,当属性有实际值时如何执行选择器?这不是一种方法[self performSelector: withObject: afterDelay:],因为我不知道什么延迟属性变得不为零。

4

2 回答 2

3

您可以使用键值观察(KVO) 来检测对象属性的更改。

在 setter 中,ImageURLObject您需要使用willChangeValueForKeyand执行通知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 回答