java写了这么多年,遇到自动管理内存还真不适应,问个问题
环境xcode4.5,在ios app应用中,main函数内会有
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([HelloAppDelegate class]));
    }
是不是在@autoreleasepool下的代码都不用手动释放内存了?
看的教程比较老,还是手动的retain和release,还有就是因为写的代码都在vicontroller等其他地方,是不是在也不用手动的释放内存了

解决方案 »

  1.   

    应该是说如果你的项目使用了ARC的话,就不用自己手动retain,release了,看上去就跟写java一样
    @autoreleasepool块是替换原来的自动释放池
      

  2.   

    支持ARC特性的就不需要你自己去释放了。
      

  3.   

    没有任何理由不使用ARC的
      

  4.   

    autoreleasepool管理的是在当前域中调用了autorelease方法的对象。如果对象使用了alloc、retain、copy操作,还是需要手动release的。
    如果使用了ARC,基本上就可以像使用java一样从内存管理中脱离开了,但仍然会有些细节需要处理。
      

  5.   

    就是说在main中有了ARC,我app里的具体的逻辑代码里就不用手动管理内存了吗?
      

  6.   

    如果在我的逻辑代码里使用了[[someobject alloc] init]获得一个对象,那么这个对象还需要手动的release,对吗?
      

  7.   

    ARC不是指的autoreleasepool。ARC是整个项目的内存管理设置。百度一下ARC吧,好些文章。
      

  8.   

    ARC是对objective-c而言的,而且还可以对每个单独的.m文件进行配置,在配置文件中好像有个配置 fno-objective-c的设置来屏蔽是否启用ARC,所以在一个项目里面允许ARC与非ARC共同存在。
      

  9.   


    我有不同意见。ARC会有负作用,而且很严重。很多大项目都要封杀掉。ARC使程序反而不稳定。比如某个对象我想保持住,但使用ARC后,系统自动帮你在“该释放的时候”释放了。但这个“该释放的时候”有时并不是要释放的。至于楼上说在一个项目里面允许ARC与非ARC共同存在,这个是非常正确的。根据需要可以单独指定。有些第三方的东西必须用ARC,而自己的工程是非ARC,就需要单独配置。
      

  10.   


    “比如某个对象我想保持住,但使用ARC后,系统自动帮你在“该释放的时候”释放了。”   那是你没有正确使用ARC…… 一个项目里的确允许ARC与非ARC共同存在,绝大多数原因是早期开发的成品接口都是非ARC的,不想改动的整合。
      

  11.   

    如果在我的逻辑代码里使用了[[someobject alloc] init]获得一个对象,那么这个对象还需要手动的release,对吗?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
      

  12.   

    ARC状态,使用对象初始化的时候,只需要去retain,alloc,copy,后边就不需要手动去release了,只管写初始化;
    非ARC的状态下,你可以这样写[[someobject alloc] init],但是你使用完someobject的时候要释放即[someobject release];
    或者这种写法[[[someobject alloc] init]autorelease];  这样 你后边就不需要去手动release了,这是自动释放池,函数调用完,自动释放池的对象会自动去逐个释放。希望对LZ有用
      

  13.   

    http://blog.csdn.net/yangfanacc/article/details/16844975
      

  14.   

    推荐使用ARC
      

  15.   

    其实你在创建项目的时候只要选中自动管理内存的那个选项,在项目开发的过程中就不用考虑内存的管理的问题了,当然这不是万能的。你可以看看这个快速入门教程http://ios.itcast.cn/news/20130505/16233286426.shtml?131203zy&csdn