ios之手动内存管理

在创建对象的时候,回生成retainCount变量,alloc,new,retain都会使这个值+1,对应的release方法则会使这个值-1。当retainCount=0时系统会调用dealloc方法使系统销毁改对象。所以我们在使用手动内存管理时,要注意一下问题:
1.原则:内存管理原则(配对原则)
创建对象时一定要保证alloc,new,retain时,后面对应出现release方法。
如下:

void test{
    Person *p =[ [Person alloc] init];
    NSLog(@"%d",p.age);
    [p release];p=nil;
}

2.避免如下问题
(1)野指针问题:调用一个已经被销毁的对象的方法。如下

void test{
    Person *p =[ [Person alloc] init];
    [p release];
        NSLog(@"%d",p.age);
}

(2)内存泄漏问题:对象已经不在使用,但是内存一直没有释放。如下

void test{
    Person *p =[ [Person alloc] init];
        p=nil;
    [p release];
}

(3)重写dealloc方法,调用[super dealloc]来释放父类中的变量
3. 多个对象的内存的释放问题

@interface Person
    {Car *car};
   -(void) setCar:(Car *car);
@end

@implementation Person
  -(void) setCar:(Car *car){
    if(_car!=car){
      //release旧职
     [_car release];
     _car = [car retain];
    }
 }

 -(void) dealloc{
   [ _car release];
   [super dealloc];
}
@end

@implementation Car
   -(void) dealloc{
    [ super dealloc];
   }
@end
-(void) test{
   Person *p =[[ Person alloc]init];
   Car *c1 =[ [Car alloc]init];
   p.car = c1;
   [c1 release];
   Car *c2 = [[Car alloc]init];
   p.car = c2;
   [p release];
}

4.@property主要完成三种操作
(1)生成get,set方法
(2)生成get,set方法的简单实现
(3)如果没有对应的成员变量声明,则会生成以_变量名的成员变量
5.nonatomic和atomic的区别
nonatomic:不生成多线程相关的代码(ios开发都用这个)
atomic:生成多线程相关的代码
6.retain,assign的区别
retain:按内存管理原则生成get,set方法(适用于对象类型,参考上面的set方法)
assign:按照简单的方式生成get,set方法(适用于对象和基本类型)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值