基本概念:
iOS有几种获取对象及释放的方法:
1、retain(alloc)
2、类方法,或者+方法(系统内部分配,内部释放)
3、1方法+autorelease
4、ARC机制
以上第一种是最基本的,也是最繁琐的方法。
第二、第三种可以看作是同一类技术(系统识别释放时机)
第四种是IOS新推出一种技术。估计里面包含有类似第二第三种技术的东西
本文核心:
以下为方法会产生内存泄漏,很快导致程序崩溃
// UI线程
- (void) playPicture:(NSDictionary *)dic
{
UIImageView *v = [dic objectForKey:@"view"];
v.image = [dic objectForKey:@"img"];
}
// 工作线程
- (void) onGetOnePic:(NSNotification *)notify
{
NSDictionary *dicInfo = [[notify.userInfo retain] autorelease]; // 用类方法产生的对象也会内存泄漏,用ARC技术的没有测试过(估计会的可能性比较大)
[self performSelectorOnMainThread:@selector(playPicture:) withObject:dicInfo waitUntilDone:NO];
}
以下为正确方法
// UI线程
- (void) playPicture:(NSDictionary *)dic
{
UIImageView *v = [dic objectForKey:@"view"];
v.image = [dic objectForKey:@"img"];
[dic release];
}
// 工作线程
- (void) onGetOnePic:(NSNotification *)notify
{
NSDictionary *dicInfo = [notify.userInfo retain];
[self performSelectorOnMainThread:@selector(playPicture:) withObject:dicInfo waitUntilDone:NO];
}
本文结论:
为了真正把控内存,建议开发者还是尽量采取第一种方法来开发ios,慎用第二、第三、第四种方法。