当对象不是nil ios时执行选择器
我有一个对象当对象不是nil ios时执行选择器,ios,null,nsobject,performselector,Ios,Null,Nsobject,Performselector,我有一个对象ImageURLObject,这个对象有属性objectUrlImage,当我创建这个对象时属性objectUrlImage为零,因为图像url还没有设置,当属性有实际值时,我如何执行选择器?这不是一个方法,因为我不知道延迟属性在什么时候变为非零。你的问题不清楚。但是如果我做对了,你应该在setter中为属性做你想做的事情 - (void)setObjectUrlImage:(UrlImage *)objectUrlImage { _objectUrlImage = obje
ImageURLObject
,这个对象有属性objectUrlImage
,当我创建这个对象时属性objectUrlImage
为零,因为图像url还没有设置,当属性有实际值时,我如何执行选择器?这不是一个方法,因为我不知道延迟属性在什么时候变为非零。你的问题不清楚。但是如果我做对了,你应该在setter中为属性做你想做的事情
- (void)setObjectUrlImage:(UrlImage *)objectUrlImage {
_objectUrlImage = objectUrlImage;
// Do something here, e.g. post notification, send a message to a delegate...
}
你的问题不清楚。但是如果我做对了,你应该在setter中为属性做你想做的事情
- (void)setObjectUrlImage:(UrlImage *)objectUrlImage {
_objectUrlImage = objectUrlImage;
// Do something here, e.g. post notification, send a message to a delegate...
}
可以使用(KVO)检测对象属性的更改
在ImageURLObject
的setter中,需要使用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
的原因之一)。您可以使用(KVO)来检测对象属性的更改
在ImageURLObject
的setter中,需要使用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
的原因之一)。实际上,您的问题是什么?不清楚这个问题根本无法理解,例如:(!ImageURLObject.objectUrlImage)只要ImageURLObject.objectUrlImage有值,就在前台等待。@LightNight在下面发布了答案。设置属性值后,您可以立即向代理发送通知或消息。这不需要执行选择器即可实现。当对象不是nil时,您可以返回通知,或者只设置一个计时器并检查对象,然后在发现时执行代码。实际上,您的问题是什么?不清楚这个问题根本无法理解,例如:(!ImageURLObject.objectUrlImage)只要ImageURLObject.objectUrlImage有值,就在前台等待。@LightNight在下面发布了答案。设置属性值后,您可以立即向代理发送通知或消息。这不需要执行选择器即可实现。您可以在对象不是nil时返回通知,也可以只设置计时器并检查对象,然后在找到时执行代码。