Objective-C

07-内存管理

2020-06-09  本文已影响0人  Andy_Livings

一、基本原理

1.什么是内存管理
2.对象的基本结构
对象的基本结构
3.引用计数器的作用
4.引用计数器的操作
5.对象的销毁

二、Xcode的设置

1.取消ARC

要想手动调用retain、release等方法,在创建项目的时候不要勾选ARC


取消ARC
2.开启僵尸对象监控

默认情况下,Xcode是不会管僵尸对象的,使用一块被释放的内存也不会报错。为了方便调试,应该开启僵尸对象监控


开启僵尸对象监控

三、内存管理原则

1.原则分析
2.谁创建,谁release
3.谁retain,谁release
4.总结

四、set方法的内存管理

如果你有个OC对象类型的成员变量,就必须管理这个成员变量的内存。比如有个Book *_book

1.set方法的实现
- (void)setBook:(Book *)book{
    if (book != _book) {
        [_book release];
        _book = [book retain];
    }
}
2.dealloc方法的实现
- (void)dealloc {
    [_book release];
    [super dealloc];
}

五、@property参数

1.控制set方法的内存管理
2. 控制需不需生成set方法
3. 多线程管理
4. 控制set方法和get方法的名称

六、循环引用

1.@class

这种代码编译会报错。当使用@class在两个类相互声明,就不会出现编译报错

2.循环retain
3.解决方案

七、autorelease

1.autorelease
2.自动释放池的创建
@autoreleasepool
{
    // ....
}
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// .....
[pool release]; // 或[pool drain];
3.应用实例
Book *book = [[Book alloc] init];
[book release];
Book *book = [[[Book alloc] init] autorelease];
// 不要再调用[book release];
+ (id)book {
    return [[[Book alloc] init] autorelease];
}

外界调用[Book book]时,根本不用考虑在什么时候释放返回的Book对象

4.规律
NSNumber *n = [NSNumber numberWithInt:100];
NSString *s = [NSString stringWithFormat:@"jack"];
NSString *s2 = @"rose";
上一篇 下一篇

猜你喜欢

热点阅读