您的位置:首页 > 产品设计 > UI/UE

iOS 小经验:UIAnimation空对象导致crash

2015-09-06 10:06 232 查看
今天调试一个老程序,发现有时运行动画会crash,仔细检查了基本的内存管理,发现都没问题!后来发现了问题,这个程序用的是下面的代码

[self performSelectorInBackground:@selector(noticeDrawer) withObject:nil];

其中,noticeDrawer函数如下,

- (void)noticeDrawer

{

[[NSNotificationCenter defaultCenter] postNotificationName:kBackToMenu object:nil userInfo:nil];

}

这里noticeDrawer函数,发出了一个notification,这个notification的相关函数是一个动画函数。那么在一个子线程里post 一个notification,这个notification的响应函数会在哪个线程里调用呢?



- (void)addObserver:(id)notificationObserver
selector:(SEL)notificationSelector
name:(NSString *)notificationName
object:(id)notificationSender


函数里,没有找到关于运行线程的描述,但是在另一个方法中:

- (id<NSObject>)addObserverForName:(NSString *)name
object:(id)obj
queue:(NSOperationQueue *)queue
usingBlock:(void (^)(NSNotification *note))block


有如下的描述:

queue
The operation queue to which
block
should be added.

If you pass
nil
, the block is run synchronously on the posting thread.

由次猜测,使用

- (void)addObserver:(id)notificationObserver
selector:(SEL)notificationSelector
name:(NSString *)notificationName
object:(id)notificationSender
方法是会在发出notification的线程里进行函数调用的,
这就解释了为什么开始的程序有问题了,它在子线程里操作UI,这个当然会引起各种问题了。
解决方法就是去掉

performSelectorInBackground这个函数(当时应该就是写错了才用了这个函数吧)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: