iOS 小经验:UIAnimation空对象导致crash
2015-09-06 10:06
232 查看
今天调试一个老程序,发现有时运行动画会crash,仔细检查了基本的内存管理,发现都没问题!后来发现了问题,这个程序用的是下面的代码
- (void)noticeDrawer
{
[[NSNotificationCenter defaultCenter] postNotificationName:kBackToMenu object:nil userInfo:nil];
}
这里noticeDrawer函数,发出了一个notification,这个notification的相关函数是一个动画函数。那么在一个子线程里post 一个notification,这个notification的响应函数会在哪个线程里调用呢?
在
函数里,没有找到关于运行线程的描述,但是在另一个方法中:
有如下的描述:
由次猜测,使用
[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 blockshould 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这个函数(当时应该就是写错了才用了这个函数吧)。
相关文章推荐
- mysql prepareStatement executeQuery() 内存溢出的解决办法
- Maximum Subsequence Sum【最大连续子序列+树状数组解决】
- Build Systems to Be Zuhanden
- SequenceInputStream(序列流)
- UIViewAnimationOptions类型
- N-Queens II
- DB 查询分析器 6.04 在 Windows 10 上的安装与运行展示
- 用UIKIT的模态对话框要注意的地方
- 基于requests实现极客学院课程爬虫
- UIImage与UIColor互转
- shop++ CriteriaQuery 数据库查询语句
- require/include
- Android UI之Notification
- UISegmentedControl的详细使用
- 基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用
- Bestcoder13 1003.Find Sequence(hdu 5064) 解题报告
- 1099. Build A Binary Search Tree (30)
- android入门(六) UI线程阻塞及其优化
- HBuild+MUI学习笔记(三):安卓模拟器安装时的注意事项
- UILabel 属性的基本用法