当对象不是nil ios时执行选择器

时间:2013-06-07 11:06:18

标签: ios null nsobject performselector

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

2 个答案:

答案 0 :(得分:3)

您可以使用Key-Value Observing(KVO)来检测对象属性的更改。

ImageURLObject的设置者中,您需要使用willChangeValueForKeydidChangeValueForKey执行通知:

- (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...
}