ios内存管理

oklinsong 2012-12-05 10:34:09
java写了这么多年,遇到自动管理内存还真不适应,问个问题
环境xcode4.5,在ios app应用中,main函数内会有
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([HelloAppDelegate class]));
}
是不是在@autoreleasepool下的代码都不用手动释放内存了?
看的教程比较老,还是手动的retain和release,还有就是因为写的代码都在vicontroller等其他地方,是不是在也不用手动的释放内存了
...全文
770 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
仙人掌绿叶 2013-12-03
  • 打赏
  • 举报
回复
其实你在创建项目的时候只要选中自动管理内存的那个选项,在项目开发的过程中就不用考虑内存的管理的问题了,当然这不是万能的。你可以看看这个快速入门教程http://ios.itcast.cn/news/20130505/16233286426.shtml?131203zy&csdn
du杜某某 2013-12-02
  • 打赏
  • 举报
回复
推荐使用ARC
Adronfan 2013-12-01
  • 打赏
  • 举报
回复
http://blog.csdn.net/yangfanacc/article/details/16844975
Martin_David 2013-11-27
  • 打赏
  • 举报
回复
ARC状态,使用对象初始化的时候,只需要去retain,alloc,copy,后边就不需要手动去release了,只管写初始化; 非ARC的状态下,你可以这样写[[someobject alloc] init],但是你使用完someobject的时候要释放即[someobject release]; 或者这种写法[[[someobject alloc] init]autorelease]; 这样 你后边就不需要去手动release了,这是自动释放池,函数调用完,自动释放池的对象会自动去逐个释放。希望对LZ有用
xingheng2 2013-11-21
  • 打赏
  • 举报
回复
引用 6 楼 oklinsong 的回复:
[quote=引用 4 楼 guansong8079776 的回复:] autoreleasepool管理的是在当前域中调用了autorelease方法的对象。如果对象使用了alloc、retain、copy操作,还是需要手动release的。 如果使用了ARC,基本上就可以像使用java一样从内存管理中脱离开了,但仍然会有些细节需要处理。
如果在我的逻辑代码里使用了[[someobject alloc] init]获得一个对象,那么这个对象还需要手动的release,对吗?[/quote] NO! NSString *str = [[NSString alloc] initWithUTF8String:"hello, stupid!"]; [str release]; 你确定在开了arc的情况下第二句代码能够编译通过? - (id)retain OBJC_ARC_UNAVAILABLE; - (oneway void)release OBJC_ARC_UNAVAILABLE; - (id)autorelease OBJC_ARC_UNAVAILABLE; - (NSUInteger)retainCount OBJC_ARC_UNAVAILABLE; /* OBJC_ARC_UNAVAILABLE: unavailable with -fobjc-arc */ #if !defined(OBJC_ARC_UNAVAILABLE) # if __has_feature(objc_arc) # if __has_extension(attribute_unavailable_with_message) # define OBJC_ARC_UNAVAILABLE __attribute__((unavailable("not available in automatic reference counting mode"))) # else # define OBJC_ARC_UNAVAILABLE __attribute__((unavailable)) # endif # else # define OBJC_ARC_UNAVAILABLE # endif #endif
Adronfan 2013-11-07
  • 打赏
  • 举报
回复
不明觉厉,,,
sinde_tian 2012-12-26
  • 打赏
  • 举报
回复
额 好像在你新建项目时 有个选项是提示是否自动释放。 如果你勾选啦 那就不用释放啦。 并且你想释放也不行, 编译会报错
ixfly 2012-12-21
  • 打赏
  • 举报
回复
如果要考虑效率的问题,还是手动管理。
念茜 2012-12-18
  • 打赏
  • 举报
回复
引用 10 楼 mwy654321 的回复:
引用 3 楼 yiyaaixuexi 的回复:没有任何理由不使用ARC的 我有不同意见。ARC会有负作用,而且很严重。很多大项目都要封杀掉。ARC使程序反而不稳定。比如某个对象我想保持住,但使用ARC后,系统自动帮你在“该释放的时候”释放了。但这个“该释放的时候”有时并不是要释放的。 至于楼上说在一个项目里面允许ARC与非ARC共同存在,这个是非常正确的。根据……
“比如某个对象我想保持住,但使用ARC后,系统自动帮你在“该释放的时候”释放了。” 那是你没有正确使用ARC…… 一个项目里的确允许ARC与非ARC共同存在,绝大多数原因是早期开发的成品接口都是非ARC的,不想改动的整合。
无条件为你 2012-12-18
  • 打赏
  • 举报
回复
引用 3 楼 yiyaaixuexi 的回复:
没有任何理由不使用ARC的
我有不同意见。ARC会有负作用,而且很严重。很多大项目都要封杀掉。ARC使程序反而不稳定。比如某个对象我想保持住,但使用ARC后,系统自动帮你在“该释放的时候”释放了。但这个“该释放的时候”有时并不是要释放的。 至于楼上说在一个项目里面允许ARC与非ARC共同存在,这个是非常正确的。根据需要可以单独指定。有些第三方的东西必须用ARC,而自己的工程是非ARC,就需要单独配置。
testing2007 2012-12-16
  • 打赏
  • 举报
回复
ARC是对objective-c而言的,而且还可以对每个单独的.m文件进行配置,在配置文件中好像有个配置 fno-objective-c的设置来屏蔽是否启用ARC,所以在一个项目里面允许ARC与非ARC共同存在。
guansong8079776 2012-12-06
  • 打赏
  • 举报
回复
autoreleasepool管理的是在当前域中调用了autorelease方法的对象。如果对象使用了alloc、retain、copy操作,还是需要手动release的。 如果使用了ARC,基本上就可以像使用java一样从内存管理中脱离开了,但仍然会有些细节需要处理。
guansong8079776 2012-12-06
  • 打赏
  • 举报
回复
引用 5 楼 oklinsong 的回复:
引用 3 楼 yiyaaixuexi 的回复:没有任何理由不使用ARC的 就是说在main中有了ARC,我app里的具体的逻辑代码里就不用手动管理内存了吗?
ARC不是指的autoreleasepool。ARC是整个项目的内存管理设置。百度一下ARC吧,好些文章。
guansong8079776 2012-12-06
  • 打赏
  • 举报
回复
引用 6 楼 oklinsong 的回复:
引用 4 楼 guansong8079776 的回复:autoreleasepool管理的是在当前域中调用了autorelease方法的对象。如果对象使用了alloc、retain、copy操作,还是需要手动release的。 如果使用了ARC,基本上就可以像使用java一样从内存管理中脱离开了,但仍然会有些细节需要处理。 如果在我的逻辑代码里使用了[[someobj……
是的!
oklinsong 2012-12-06
  • 打赏
  • 举报
回复
引用 4 楼 guansong8079776 的回复:
autoreleasepool管理的是在当前域中调用了autorelease方法的对象。如果对象使用了alloc、retain、copy操作,还是需要手动release的。 如果使用了ARC,基本上就可以像使用java一样从内存管理中脱离开了,但仍然会有些细节需要处理。
如果在我的逻辑代码里使用了[[someobject alloc] init]获得一个对象,那么这个对象还需要手动的release,对吗?
oklinsong 2012-12-06
  • 打赏
  • 举报
回复
引用 3 楼 yiyaaixuexi 的回复:
没有任何理由不使用ARC的
就是说在main中有了ARC,我app里的具体的逻辑代码里就不用手动管理内存了吗?
念茜 2012-12-05
  • 打赏
  • 举报
回复
没有任何理由不使用ARC的
Snake_Jay 2012-12-05
  • 打赏
  • 举报
回复
支持ARC特性的就不需要你自己去释放了。
巴依老爷 2012-12-05
  • 打赏
  • 举报
回复
应该是说如果你的项目使用了ARC的话,就不用自己手动retain,release了,看上去就跟写java一样 @autoreleasepool块是替换原来的自动释放池

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧