黑马程序员——ARC的基本原理和@property的使用

本文介绍了Objective-C的Automatic Reference Counting (ARC),它自动处理内存管理,避免内存泄露。在ARC工程中,非ARC源文件需手动取消或转换。ARC的特点包括禁止手动内存管理,对`dealloc`的特殊规定,以及`@property`参数的变更。`strong`和`weak`关键字用于指针引用,防止循环引用。`property`的使用要点涉及内存管理、setter/getter生成、多线程及自定义方法名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1、ARC的概述:

全称叫 ARC(Automatic Reference Counting)。

简单地说,就是代码中自动加入retain/release,原先需要手动添加的用来处理内存管理的引用计数器的代码可以自动由编译器完成。


2、ARC的优点

        a)不需要手动的内存管理,减少了不必要的工作量。无需担心内存泄露

        b)减少了代码的总量 ,看上去更加整齐美观


3、在使用ARC的工程中,如何处理未使用ARC功能的源文件

对于老的源代码需要手动修改,取消ARC功能。因为ARC的工程里默认是全部使用ARC的。

设置方法见下图:



或使用Xcode的自动转换成ARC格式工具进行修改。

操作流程:

        单击菜单的Edit---单击Refactor---单击Convert to Objective-C ARC

        最后点击save按钮结束。

4、ARC释放内存的判断准则

只要没有强指针指向对象,就会释放对象

强指针与弱指针的创建方式:

    __weak Person *p1;    //  p1为弱指针
    __strong Person *p2;  //  p2为强指针
    Person *p3;           //  p3为强直阵

如果没有在类名前加入__weak或__strong则指针默认为强指针。


5、ARC的特点

 1> 不允许调用releaseretainretainCount

 2> 允许重写dealloc,但是不允许调用[super dealloc]

 3> @property的参数

  * strong :成员变量是强指针(适用于OC对象类型)

  * weak :成员变量是弱指针(适用于OC对象类型)

  * assign : 适用于非OC对象类型

 4> 以前的retain改为用strong

 5> 假如两种类的存在循环引用的情况,其中一个的成员对象指针应设置成weak


6、property的使用要点


    a)set方法内存管理相关的参数

                retain : release旧值,retain新值(适用于OC对象类型)

                assign :直接赋值(默认,适用于非OC对象类型)

                copy   : release旧值,copy新值

                strong:在使用ARC是生成强指针指向的对象

                weak:在使用ARC是生成弱指针指向的对象

    b)是否要生成set方法

                readwrite : 同时生成settergetter的声明、实现(默认)

                readonly  :只会生成getter的声明、实现

    c)多线程管理

                nonatomic : 性能高 (一般就用这个)

                atomic    : 性能低(默认)

    d)自定义getter和settter的方法名

                写成:getter = ******   和 setter = ******:     (需要注意setter的名字最后一定要有“:”冒号。)

书写格式举例:

      

@property (getter = isRich) BOOL rich;

@property (nonatomic, assign, readwrite) int weight;

@property (readwrite, assign) int height;

@property (nonatomic, assign) int age;

@property (retain) NSString *name;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值