关闭

黑马程序员_iOS_OC_ARC

41人阅读 评论(0) 收藏 举报

——- 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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:452次
    • 积分:110
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档