[TwistedFate]内存管理

苹果设备的内存管理

mac系统内存管理:垃圾回收以及引用计数管理
手机IOS设备:引用计数管理

影响引用计数的方法

alloc

开辟空间 引用计数 从0 –> 1

retain

使引用计数 + 1

copy
 取决于怎么写
release

影响引用计数 - 1

autorelease

需要自动释放池去 - 1

// 释放池
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[p1 autorelease];
[pool release];

// 释放池(目前用的)
@autoreleasepool {
Person *p2 = [Person personWithName:@"11" age:11];
}

当对象的引用计数为0时 该对象就会被释放,然后调用dealloc方法

delloc方法

- (void)dealloc{
    // 如果你要在dealloc中使用对象的话
    // 一定要写在[super dealloc]的上面
    // 避免出现野指针问题
    NSLog(@"哈哈 释放了");
    // 如果重写dealloc 必须调用父类的方法
    // 保证 对象可以被释放
    [super dealloc];
}

总结: 类方法 便利构造器方法 使用 autorelease
其他方法 需要在外部释放

copyWithZone:

实现拷贝协议的方法,copy对引用计数的影响,看这个函数怎么写

// 伪拷贝
// return self;
// 浅拷贝
// 浅拷贝后有两个对象 但是两个变量的值是同一个值
// 引入计数变化 被拷贝的对象不变 拷贝出来的新对象加1 从0 --> 1
// Person *per = [[Person alloc] initWithName:self.name age:self.age];
// 深拷贝 拷贝出新对象 并且对象值也重新拷贝出一份 再赋值
// 对字符串进行拷贝 拷贝的结果要看字符串 这个类如何实现的方法
// 对不可变字符串的拷贝方法 对不可变字符串的拷贝 其实相当于 直接retain一次
// 可变字符串 拷贝时 就是真拷贝一个新的
NSString *name = [_name copy];
    Person *per = [[Person alloc] initWithName:name age:_age];
    return per ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值