Objective-C——基础3

一. 操作引用计数器的方式:

  1. retainCount:获得对象的引用计数器的值

  2. retain:能够让对象的计数器值+1

  3. release:让对象的计数器值 - 1

二. 怎么判断对象被释放?

  1. dealloc方法:只要调用了这个方法,就代表对象即将被释放.

  2. 重写dealloc方法,必须在最后添加上 [super dealloc];

  3. 当计数器值为0时会自动调用dealloc释放内存

三. 补充

  1. 僵尸对象:已经被释放的对象

  2. 野指针:指向僵尸对象的指针

  3. 空指针:指向nil的指针,给空指针发送消息(调用方法)不会报任何错误.

四. @property

格式:@property (参数1,参数2,…) 变量类型 变量名(去掉下划线);

  1. retain:参数用于对象类型,能够帮我们生成set方法的内存管理代码.
    assign:参数,用于基本数据类型,不做内存管理代码.

  2. atomic:对线程加锁,性能低,安全性高(默认).
    nonatomic:不对线程加锁,性能高,安全性低.手机端,建议使用nonatomic

  3. readonly:只能操作,只给外界提供get方法,不提供set方法.
    readwirte:可读可写.

  4. setter:改set方法的名字
    getter:改get方法的名字

五. setter的方法的内存管理方式

- (void)setCat:(Cat *)cat
{
   if(_cat != cat)
   {
       [_cat release];
       _cat = [cat retain];
   }
}

六. @Class

  1. @Class简单的声明一个类,可用于解决循环引用。

  2. 跟#import的区别
    (1). import用于引入文件,可以让文件不重复引用,引入文件里面所有的内容,包括成员变量和方法.
    (2). @class仅仅告诉编译器,它修饰的是一个类而已.
    建议.h文件当中使用@class

七. 循环retain

当A包含B,B包含A;对象都无法被释放.

解决办法:一边用assign 一边用retain

八. NSString类是系统单独做处理的,不能够对其做内存管理操作.

九. 自动释放池

  1. 自动释放池出现之前,创建1个对象时,需要在合适的位置调用release.

  2. 自动释放池的作用
    对池子里面的所有对象,当对象调用autorelease,在池子被释放时,统一做一次release操作.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值