编写高质量代码的52个有效方法

52个有效方法(30) - 以ARC简化引用计数

2018-09-06  本文已影响3人  SkyMing一C

使用ARC时一定要记住,引用计数实际上还是要执行的,只不过保留与释放操作现在是由ARC自动为你添加。

所以直接在ARC下调用这些内存管理方法是非法的:

- (instancetype)retain OBJC_ARC_UNAVAILABLE;
- (oneway void)release OBJC_ARC_UNAVAILABLE;
- (instancetype)autorelease OBJC_ARC_UNAVAILABLE;
- (void)dealloc OBJC_SWIFT_UNAVAILABLE("use 'deinit' to define a de-initializer");
/**
实际上,ARC在调用这些方法时,并不通过普通的Objective-C消息派发机制,而是直接调用其底层C语言版本。
*/
使用ARC时必须遵循的方法命名规则
- (EOCPerson *)personWithName:(NSString *)name
{
    EOCPerson * person = [[EOCPerson alloc] init];
    person.name = name;
    objc_autoreleaseReturnValue(person);
    return nil;
}
EOCPerson *tmp = [EOCPerson personWithName:@"Matt Galloway"];
_myPerson = objc_retainAutoreleasedReturnValue(tmp);
变量的内存管理语义
ARC如何清了实例变量
////ARC模式下的内存管理 
- (void)dealloc
{
/**
  ARC会自动在.cxx_destruct方法中生成代码并运行此方法,而在生成的代码中会自动调用超类的dealloc方法,不需要像原来那样调用超类的dealloc方法
*/
    CFRelease(_coreFoundationObject);
    free(_heapAllocatedMemeoryBlob);
}
要点
  1. 有ARC之后,程序员就无需担心内存管理问题了。使用ARC来编程,可省去类中的许多“样板代码”。

  2. ARC管理对象生命期的办法基本上就是:在合适的地方插入“保留”及“释放”操作。在ARC环境下,变量的内存管理语义可以通过修饰符指明,而原来则需要手工执行“保留”和“释放”操作。

  3. 由方法所返回的对象,其内存管理语义总是通过方法名来体现。ARC将此确定为开发者必须遵守的规则。

  4. ARC只负责管理Objective-C对象的内存。尤其要注意:CoreFoundation对象不归ARC管理,开发者必须适时调用CFRetain/CFRelease。

上一篇 下一篇

猜你喜欢

热点阅读