黑马程序员 _9 OC基础 内存管理

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

一 ARC默认开启关闭方法.

Xcode5之后的版本建立项目时默认的ARC选择开关已经不存在,所以默认开启ARC,想要关闭需要建立完project在那个蓝色的图标中右边一栏下拉至Apple LLVM5.1-Language=Objective C一项中的 ARC设置为No.


二 内存管理OC的方式

1.引用计数器的方式.

当使用alloc new 或者copy创建一个新对象时,系统会自动将新对象的计数器默认设置为1,若当计数器为0时,对象就会被从内存中释放.,而通过retain与release可以对对象进行计数器增减操作,方便对象在内存中的管理. 使用retainCount可以获得当前的计数器值.而当回收对象时,调用dealloc,[super dealloc]一定放在最后面.

如:

int main()
{
    Person *p = [[Person alloc] init];
        [p retain];
     [p release];
     [p release];
    
    [p retain];
    
    return 0;
}
dealloc的用法:在相应的类实现文件中如Person.m

#import "Person.h"
@implementation Person
- (void)dealloc
{
    NSLog(@"Person对象被回收");
  [super dealloc];
}
@end

内存管理的原则:谁创建,谁release,谁调用retain,谁release. 有过计数器+1,那就必须之后-1.

2.对于set方法,当变量是基本数据类型的时候,不变,

针对OC对象类型,按照是否新的对象判断如下

- (void)setCar:(Car *)car
 {
    // 1.先判断是不是新传进来对象
    if ( car != _car )
    {
        // 2.对旧对象做一次release
        [_car release];
 
        // 3.对新对象做一次retain
        _car = [car retain];
    }
 }
3.对于@property参数一般使用的方法:

set有retain assign copy readwrite readonly等参数,

线程管理有nonatomic(性能高,一般使用) atomic(默认),

注意:返回BOOL类型的方法名一般以is开头

相关使用如:

@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;
4.上面的一个个的对象参数retain使用有了新的代替那就是autorelease自动释放池,添加参数autorelease会将对象创建到自动释放池中,当自动释放池销毁时,会自动将release消息发送给对象   对于系统自带的方法中,如果不包含alloc new copy 说明这些方法返回的对象都是已经autorelease过的.

5.循环使用:

@class的使用,声明该名称是个类,利用#import"  "使用类中所有的内容.

7.arc的使用

Xcode5之后ARC是默认开启的,ARC方便了内存管理,是程序员不用将时间浪费在内存管理上,判断准则:只要没有强指针指向对象,就会释放对象.

ARC既然包含了内存管理,那么之前的内存管理所使用的方法,各种参数就被禁止了,release retain retainCount 不可以调用,dealloc可以重写,但是不允许调用[super dealloc],@property的参数 分strong weak assign(适用于非OC对象).

 指针默认为强指针,也就是_strong, 弱指针为_weak. 

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值