黑马程序员_iOS_OC_ARC

——- android培训java培训、期待与您交流! ———-

  1. ARC概念及原理
/*
 1.指针分类
 1)强指针:默认情况下都是强指针,关键字:strong
 2)弱指针:关键字:__weak
 2.什么是ARC
 编译器特性,垃圾回收是运行时特性
 3.ARC工作原理
 编译时插入内存管理代码
 判断:只要没有强指针指向对象,对象就释放。(忘记引用计数器)
 4.ARC机制图解
 */

2.ARC快速入门

/*
 1.ARC机制判断
判断是否是ARC机制
    查看项目信息
    不能使用retain,release autorelease retainCount
    dealloc方法中不能使用 [super dealloc];
 2.ARC快速使用
    正常创建对象,不用手动释放对象
 */
#import <Foundation/Foundation.h>
#import "Dog.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Dog *dog = [Dog new];
        [dog run];
    }
    return 0;
}

3.ARC下单对象内存管理

/*
 1.ARC下单对象内存管理

 2.强弱指针

 */
#import <Foundation/Foundation.h>
#import "Dog.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
//        在ARC下对象释放判断依据:对象没有强指针指向
//        对象立即销毁
//        __weak 弱指针  内存释放  指向nil
        Dog *dog = [Dog new];
        __weak Dog *dog2 = dog;
//        指针指向立即发生改变,对象没有强指针指向,对象立即销毁
        dog = nil;
        [dog2 run];

        [dog run];
    }//对象释放
    return 0;
}

4.ARC下多对象内存管理

#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Person.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Dog *dog = [Dog new];
        Person *person = [Person new];
/*
 Person中@property (nonatomic,weak) Dog *dog;
 dog = nil   dog对象立即销毁

 Person中@property (nonatomic,strong) Dog *dog;
 dog = nil   dog对象不会立即销毁
 */
        person.dog = dog;
    }
    return 0;
}

5.ARC下循环引用问题

/*
 1.ARC下循环引入问题
 2.ARC下 @property set方法参数
 原子性、读写 和MRC一样
 MRC              ARC
    assign          assign
    retain          strong(oc对象)/weak(ui控件)
    copy            copy
 */
#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Person.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Dog *dog = [Dog new];
        Person *person = [Person new];
/*
Person中@property (nonatomic,strong) Dog *dog;
Dog中@property (nonatomic,strong) Dog *dog;
构成循环引用问题,必须其中一个weak
*/
        person.dog = dog;
        dog.person = person;
    }
    return 0;
}

6.ARC使用特点及注意事项

#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //1.Student new
        //2.弱指针  指向
        //3.创建后立即销毁
        //释放空间
        //stu = nil
        __weak Person *person = [Person new];
        NSLog(@"%d",person.age);
    }
    return 0;
}

7.ARC模式下如何兼容ARC的类
编译标志:
1)ARC中使用MRC(-fno-objc-arc)
2)转变为ARC(-f-objc-arc)
8.MRC转ARC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值