IOS 中什么是 ARC,如何使用?

ARC是Automatic Reference Counting的缩写,意为自动引用计数。它是iOS中的内存管理机制。
在ARC下,程序员不再需要手动进行内存管理工作,编译器会在编译时插入适当的retain、release和autorelease消息来管理对象的内存。这样可以防止内存泄漏和野指针的产生。
使用ARC的好处是:

  1. 简化内存管理。程序员不再需要手动进行内存管理,编译器会自动插入适当的代码。
  2. 减少错误。避免由于内存管理产生的问题,如野指针和内存泄漏。
  3. 性能稍微提高。ARC可以进行更加高效的内存管理。
    实现ARC只需要在编译时添加-fobjc-arc参数即可。例如:
$ gcc -fobjc-arc test.m -o test

对于已有的非ARC代码,可以通过添加__weak和__strong等ARC保留字的方式逐步过渡到ARC。
在ARC下,遵循以下两条规则:

  1. 如果将一个指针赋值给另一个指针,会自动进行retain。
  2. 如果一个指针在作用域结束时未被强引用,会自动进行release。
    例如:
@interface Person : NSObject
@end

@implementation Person
@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person *p1 = [[Person alloc] init];

        Person *p2 = p1;  // p1进行retain, p2也指向p1
        p2 = nil;        // p1进行release

        Person *p3;
        {
            p3 = [[Person alloc] init];  // p3指向Person实例
            // p3作用域结束,p3自动release
        }
    }
}

ARC的出现简化了iOS开发内存管理的难度,让iOS开发更加高效和轻松。