您好我正在使用NSNotificationCenter defaultCenter在我的应用中实现“喜欢”和“评论”功能。
//In Answer Table View
@implementation AnswerTableView
- (id)initWithParentController:(UIViewController *)pController andResourcePath:(NSString *)thisResourcePath {
....
// Notification to reload table when a comment is submitted
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reloadTable)
name:@"Comment Submitted"
object:nil];
// Notification to reload table when an answer is liked
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reloadTable)
name:@"Answer Liked"
object:nil];
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}
//In custom button implementation - THIS BUTTON IS CREATED IN EVERY CELL OF THE TABLEVIEW
@implementation UICustomButton
-(id)initWithButtonType:(NSString *)type {
self = [super init];
if (self) {
//Initialization done here
}
return self;
}
- (void)buttonPressed {
if ([btnType isEqualToString:@"like"]) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"Answer Liked" object:nil];
}
else if ([btnType isEqualToString:@"comment"]) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"Comment Submitted" object:nil];
}
}
但是,我意识到在使用这些函数一段时间后,表重新加载的响应速度变得越来越慢(到崩溃的程度)。
我是否错过了实施中的任何内容,即解除分配等等
答案 0 :(得分:1)
您反复添加观察者并且发生减速,因为通知代码必须循环越来越多的观察者来发送通知。你可能正在崩溃,因为你泄露了很多这些观点。
在dealloc中放置一条日志语句,以查看是否清理过这些实例。在dealloc方法中,removeObserver也可能存在时序问题。如果可以的话,尝试在dealloc之前删除观察者。
答案 1 :(得分:1)
有时可以使用Grand Central Dispatch对事件进行排队,以确保它在主线程上运行。
dispatch_async(dispatch_get_main_queue()