0

嗨,我正在使用 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];
    }
}

但是,我意识到在使用这些功能一段时间后,表重新加载的响应速度越来越慢(到了崩溃的地步)。

我是否错过了实现中的任何内容,即解除分配等

4

2 回答 2

1

Sometimes its good to queue the event with Grand Central Dispatch to make sure its running on the main thread.

dispatch_async(dispatch_get_main_queue()
于 2015-01-16T06:30:38.390 回答
1

您反复添加观察者并且速度变慢是因为通知代码必须循环越来越多的观察者来发送通知。您可能正在崩溃,因为您泄漏了这么多这些视图。

在您的 dealloc 中放置一条日志语句,以查看这些实例是否被清理过。此外,dealloc 方法中的 removeObserver 也可能存在时间问题。如果可以,请尝试在 dealloc 之前删除观察者。

于 2012-07-29T11:44:14.833 回答