- 线程的创建
先看两则代码:
代码1:
for (NSString *feedID in self.feedsToRemove) {
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
[Feed MR_deleteAllMatchingPredicate:[NSPredicate predicateWithFormat:@“uid = %@“,feedID]];
} completion:^(BOOL contextDidSave, NSError *error) {
}];
}
代码2:
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
for (NSString *feedID in self.feedsToRemove) {
[Feed MR_deleteAllMatchingPredicate:[NSPredicate predicateWithFormat:@“uid = %@“,feedID]];
}
} completion:^(BOOL contextDidSave, NSError *error) {
}];
代码1是错误的,因为会产生严重的线程问题,导致CPU居高不下,UI僵死等,
为什么呢?我们可以这样理解:MagicalRecord 的这个saveWithBlock方法,其实是创建一个子线程来处理数据事务,于是 当self.feedsToRemove有N个对象 那么就会产生N个线程,当然 对于一个设备来说线程总有一个最高数限制,直到把所有线程用光,于是乎整个世界就全被线程塞满了,卡死。。。
所以我们采用代码2中的写法,将枚举写如子线程中。
PS:这样的问题其实就是错误使用线程创建导致,还是自己马虎啊。。切记。