美文网首页Objective-C
ARC下的内存管理

ARC下的内存管理

作者: 越天高 | 来源:发表于2019-02-23 20:54 被阅读0次

1.ARC下单对象内存管理

  • 局部变量释放对象随之被释放
int main(int argc, const char * argv[]) {
   @autoreleasepool {
        Person *p = [[Person alloc] init];
    } // 执行到这一行局部变量p释放
    // 由于没有强指针指向对象, 所以对象也释放
    return 0;

  • 清空指针对象随之被释放
- int main(int argc, const char * argv[]) {
   @autoreleasepool {
        Person *p = [[Person alloc] init];
        p = nil; // 执行到这一行, 由于没有强指针指向对象, 所以对象被释放
    }
    return 0;
}
  • 默认清空所有指针都是强指针
int main(int argc, const char * argv[]) {
   @autoreleasepool {
        // p1和p2都是强指针
        Person *p1 = [[Person alloc] init];
        __strong Person *p2 = [[Person alloc] init];
    }
    return 0;
}
  • 弱指针需要明确说明
    注意: 千万不要使用弱指针保存新创建的对象
int main(int argc, const char * argv[]) {
   @autoreleasepool {
        // p是弱指针, 对象会被立即释放
        __weak Person *p1 = [[Person alloc] init];
    }
    return 0;
}

2.ARC下多对象内存管理

  • ARC和MRC一样, 想拥有某个对象必须用强指针保存对象, 但是不需要在dealloc方法中release
@interface Person : NSObject

// MRC写法
//@property (nonatomic, retain) Dog *dog;

// ARC写法
@property (nonatomic, strong) Dog *dog;

@end

3.ARC下循环引用问题

  • ARC和MRC一样, 如果A拥有B, B也拥有A, 那么必须一方使用弱指针
@interface Person : NSObject

//@property (nonatomic, retain) Dog *dog;
@property (nonatomic, strong) Dog *dog;

@end

@interface Dog : NSObject

// 错误写法, 循环引用会导致内存泄露
//@property (nonatomic, strong) Person *owner;

// 正确写法, 当如果保存对象建议使用weak
//@property (nonatomic, assign) Person *owner;
@property (nonatomic, weak) Person *owner;
@end

4.ARC下@property参数

  • strong : 用于OC对象, 相当于MRC中的retain
  • weak : 用于OC对象, 相当于MRC中的assign
  • assign : 用于基本数据类型, 跟MRC中的assign一样

相关文章

  • iOS开发之Autoreleasepool简介

    Autoreleasepool即自动释放池,是在ARC自动管理内存机制下用来管理程序中开辟的内存的,ARC工程每个...

  • iOS夯实:ARC时代的内存管理

    iOS夯实:ARC时代的内存管理 iOS夯实:ARC时代的内存管理

  • ARC下内存管理

    ARC(Automatic Reference Counting):自动引用计数,可以说是WWDC2011和iOS...

  • ARC下的内存管理

    ARC的本质 ARC是编译器(时)特性,而不是运行时特性,更不是垃圾回收器(GC)。 Automatic Refe...

  • ARC下的内存管理

    前序:ARC是自动引用计数,MRC是引用计数。引用计数的原理是跟随OC的出生就存在的。 一、修饰符 1 __str...

  • ARC下的内存管理

    1.ARC下单对象内存管理 局部变量释放对象随之被释放 清空指针对象随之被释放 默认清空所有指针都是强指针 弱指针...

  • OC中内存管理

    在OC中内存管理MRC手动内存管理和ARC自动内存管理,ARC是从iOS 4.0开始,在iOS 4.0之前...

  • iOS - ARC环境下dealloc/didReceiveMe

    block没那么难(三):block和对象的内存管理 一、iOS开发 ARC下dealloc的使用 ARC下,系统...

  • iOS内存管理详解

    iOS内存管理 前言: 现在的iOS开发已然是ARC时代,swfit的发展趋势也不错,ARC下的日常开发,随对内存...

  • 内存管理

    ARC内存管理机制详解理解 iOS 的内存管理

网友评论

    本文标题:ARC下的内存管理

    本文链接:https://www.haomeiwen.com/subject/yfppyqtx.html