ios工程中使用ARC技术

来源:互联网 发布:2个excel表格数据匹配 编辑:程序博客网 时间:2024/06/04 19:11
     

       自动计数(ARC)是一个编译期间工作的能够帮你管理内存的技术,通过它,程序人员可以不需要在内存的retain,释放等方面花费精力。

       ARC在编译期间为每个Objective-C指针变量添加合适的retain, release, autorelease等函数,保存每个变量的生存周期控制在合理的范围内,以期实现代码上的自动内存管理。

       ios4版本及以上才能支持ARC。



            使用ARC需要注意以下几点:

          1.  禁止使用dealloc,retainreleaseretainCountautorelease。禁止任何形式调用和实现(dealloc可能会被实现),包括使用@selector(retain)@selector(release)等的隐含调用。

你可能会实现一个和内存管理没有关系的dealloc,譬如只是为了调用[systemClassInstance setDelegate:nil] ,但是请不要调用[super dealloc] ,因为编译器会自动处理这些事情。

         2.不能在C语言中的结构中使用Objective-c中的类的指针。

 3.不能使用NSAutoreleasePool.作为替代,@autoreleasepool被引入,你可以使用这个效率更高的关键词。

    4.不能使用memory zones.  NSZone不再需要—本来这个类已经被现代Objective-c废弃。

         5.禁止以new开头的属性变量命名。


         

属性变量修饰符

weak和strong两个修饰符是新引进的,使用例子如下:

// 下面的作用和: @property(retain) MyClass *myObject;相同
@property(strong) MyClass *myObject;
 
// 下面的作用和"@property(assign) MyClass *myObject;"相识
// 不同的地方在于,如果MyClass的实例析构后,这个属性变量的值变成nil,而不是一个野指针,
 
@property(weak) MyClass *myObject;

其他的新功能

使用ARC技术,可以使得在栈上分配的指针隐式的初始化为nil,比如

- (void)myMethod {
    NSString *name;
    NSLog(@"name: %@", name);
}

上面的代码会Log出来一个null,不会象不使用ARC技术的时候使得程序崩溃


原创粉丝点击