Xcode中使用NSAutoreleasePool报错的问题
2013-04-24 21:37
155 查看
NSAutoreleasePool
*pool;
pool = [[NSAutoreleasePool alloc] init];
//omitted
[pool drain];
return 0;
程序报错为"NSAutoreleasePool is unavailable: not available in automatic reference counting mode".
经过搜索得知Learning Objective-c on Mac使用的是比例老Xcode版本,而在Xcode4.2之后的版本中引入了ARC特性来自动管理内存,所以应该将下面的代码发为下面的样子。
@autoreleasepool{
//omitted.
}
解决方式:
禁用可以设置 Build Setting => "Apple LLVM compiler 3.0-Code Generation“ => “Objective-C automatic Reference Counting" 置为NO。
还可以设置 "Build Phases" => "Compile Sources" 中在禁用的源文件上加编译参数: -fno-objc-arc 。
基本的ARC使用规则
代码中不能使用retain, release, retain, autorelease
不重载dealloc(如果是释放对象内存以外的处理,是可以重载该函数的,但是不能调用[super dealloc])
不能使用NSAllocateObject, NSDeallocateObject
不能在C结构体中使用对象指针
id与void *间的如果cast时需要用特定的方法(__bridge关键字)
不能使用NSAutoReleasePool、而需要@autoreleasepool块
不能使用“new”开始的属性名称 (如果使用会有下面的编译错误”Property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects”)
使用ARC的好处
Objective-C的代码变得简单多了,因为我们不需要担心烦人的内存管理,担心内存泄露了
代码的总量变少了,看上去清爽了不少,也节省了劳动力
代码高速化,由于使用编译器管理引用计数,减少了低效代码的可能性
不好的地方
记住一堆新的ARC规则 — 关键字及特性等需要一定的学习周期
一些旧的代码,第三方代码使用的时候比较麻烦;修改代码需要工数,要么修改编译开关
*pool;
pool = [[NSAutoreleasePool alloc] init];
//omitted
[pool drain];
return 0;
程序报错为"NSAutoreleasePool is unavailable: not available in automatic reference counting mode".
经过搜索得知Learning Objective-c on Mac使用的是比例老Xcode版本,而在Xcode4.2之后的版本中引入了ARC特性来自动管理内存,所以应该将下面的代码发为下面的样子。
@autoreleasepool{
//omitted.
}
解决方式:
禁用可以设置 Build Setting => "Apple LLVM compiler 3.0-Code Generation“ => “Objective-C automatic Reference Counting" 置为NO。
还可以设置 "Build Phases" => "Compile Sources" 中在禁用的源文件上加编译参数: -fno-objc-arc 。
基本的ARC使用规则
代码中不能使用retain, release, retain, autorelease
不重载dealloc(如果是释放对象内存以外的处理,是可以重载该函数的,但是不能调用[super dealloc])
不能使用NSAllocateObject, NSDeallocateObject
不能在C结构体中使用对象指针
id与void *间的如果cast时需要用特定的方法(__bridge关键字)
不能使用NSAutoReleasePool、而需要@autoreleasepool块
不能使用“new”开始的属性名称 (如果使用会有下面的编译错误”Property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects”)
使用ARC的好处
Objective-C的代码变得简单多了,因为我们不需要担心烦人的内存管理,担心内存泄露了
代码的总量变少了,看上去清爽了不少,也节省了劳动力
代码高速化,由于使用编译器管理引用计数,减少了低效代码的可能性
不好的地方
记住一堆新的ARC规则 — 关键字及特性等需要一定的学习周期
一些旧的代码,第三方代码使用的时候比较麻烦;修改代码需要工数,要么修改编译开关
相关文章推荐
- Xcode中使用NSAutoreleasePool报错的问题
- NSAutoReleasePool使用中drain和release的区别
- NSAutoReleasePool使用中drain和release的区别
- 了解Objective-C中NSAutoreleasePool使用方法
- NSAutoReleasePool使用中drain和release的区别
- NSAutoReleasePool使用中drain和release的区别
- NSAutoReleasePool使用中drain和release的区别
- Xcode4使用release报错的问题
- NSAutoReleasePool使用中drain和release的区别
- NSAutoReleasePool使用中drain和release的区别
- xcode 5编译NSAutoreleasePool的问题
- NSAutoReleasePool使用中drain和release的区别
- NSAutoReleasePool使用中drain和release的区别
- Foundation框架经常使用数据类型和NSAutoreleasePool自己主动释放池解析
- xcode 使用过程中遇到的问题
- Xcode中使用SVN(进行多人开发)需要注意的问题
- 关于AndroidManifest.xml开发中使用系统权限报错的问题
- Xcode7 使用自带git身份不确认的问题
- Android——UI篇:关于Fragment的构造参数打包release版本报错的问题
- 【汇总】iOS开发及Xcode使用中遇到的一些报错问题汇总