本文共 1071 字,大约阅读时间需要 3 分钟。
把握 线程 和 Runloop 的关系
返回 当前类的实例 的 类方法 都是 autorelease的
会交给 所在 释放池 进行管理
主线程的 runloop 是一直存在的
当 perform selector 在后台线程中执行的时候, 这个线程 必须 有一个开启的 runloop
子线程的 runloop 默认是不开启的
perform selector 是 selector源
在创建的子线程中要先放一个 @autoreleasepool { }
NSOperation的main方法中 就是如此
operation 的 executing和 finishing 状态量需要用willChangeValueForKey / didChangeValueForKey来触发KVO消息
要注意:
并发的Operation放在子线程中的情况
子线程默认不创建runloop,start方法返回之后 子线程就退出了
所以start方法中创建异步NSURLConnection的delegate回调时线程已经木有了
tableview 用runloop加载图片的性能优化
[self.cellImageView performSelector:@selector(setImage:)
withObject: downloadedImage
afterDeleay:0
inModes:@[ NSDefaultRunLoopMode]
]
被add到Queue里面的Operation必定是并发的,不用 care 它自身是不是并发设计了
这是为什么呢?这是因为Queue回味每一个add到队列的Operation创建一个线程来运行其start方法
如果maxConcurrentOperationCount设置为1或者吧operation放到 [NSOperationQueue mainQueue]里面执行,那它们只能是顺序执行,不可能并发
关于实时搜索问题如何保证结果是搜索的最新的条件的结果
每次执行request的时候都把上一个operation cancel掉,然后在completionBlock中判断operation是否cancel状态,如果是cancel状态,那么就不返回response的值不就行了
问题: nav.delegate 的属性语义修饰问题(iOS8 以及以下是assign)
tableView的headerview的刷新问题(iOS8刷新的时候 不会应用headerview最新的frame,即刷新不起作用)
转载地址:http://awwhf.baihongyu.com/