Objective c 如何在一个对象解除锁定时运行一些代码
当一个对象获得dealloc时,需要运行一些代码。例如,我设置了一个观察者,当对象B的名称更改时,它会更新标签A的文本。当标签A的保留计数达到0时,我想从B中删除观察者 可能的解决办法: 1子类并调用dealloc中的干净代码 2创建一个包装器类,该类能够在dealloc中运行任意代码,并将此对象与标签a关联。当一个get dealloc时,关联的对象get dealloc也会被关联。假设只有a持有对它的强引用,则会调用该代码 我不喜欢第一个,因为它是如此侵入,使它几乎没有用处,需要子类只是为了一些简单的东西。所以我用的是2号Objective c 如何在一个对象解除锁定时运行一些代码,objective-c,cocoa-touch,Objective C,Cocoa Touch,当一个对象获得dealloc时,需要运行一些代码。例如,我设置了一个观察者,当对象B的名称更改时,它会更新标签A的文本。当标签A的保留计数达到0时,我想从B中删除观察者 可能的解决办法: 1子类并调用dealloc中的干净代码 2创建一个包装器类,该类能够在dealloc中运行任意代码,并将此对象与标签a关联。当一个get dealloc时,关联的对象get dealloc也会被关联。假设只有a持有对它的强引用,则会调用该代码 我不喜欢第一个,因为它是如此侵入,使它几乎没有用处,需要子类只是为了
你有什么意见吗?你是怎么做到的?我把我的解决方案放在这里,以防有人需要
@interface ExecuteWrapper : NSObject
@property (nonatomic, copy) void(^block)();
-(void)dealloc;
@end
@implementation ExecuteWrapper
-(void)dealloc{
if(self.block){
self.block();
}
}
@end
@implementation NSObject (SLUtil)
+(void)executeWhenDealloc:(NSObject *)object block:(void(^)())block{
static char key;
NSMutableArray *executeWrapperArray = [object associatedValueForKey:&key];
if ( executeWrapperArray == nil){
executeWrapperArray = [NSMutableArray array];
[object associateValue:executeWrapperArray withKey:&key];
}
ExecuteWrapper *executeWrapper = [[ExecuteWrapper alloc] init];
executeWrapper.block = block;
[executeWrapperArray addObject:executeWrapper];
}
@end
在客户端代码中
[NSObject executeWhenDealloc:labelA block:^{
// clean up code
}];
注意:请记住,不要在标签中保留标签a的强引用听起来这两个对象都不是控制器,通常控制器会执行这种角色。