ARC下属性对象实例对象内存释放时机

  ARC下属性对象实例对象内存释放时机

     在ARC的机制里,内存是由系统释放,ARC的一个基本规则即使,只要某个对象被任一strong指针指向,那么它将不会被销毁。如果对象没有被任何strong指针指向,那么就将被销毁。在默认情况下,所有的实例变量和局部变量都是strong类型的。可以说strong类型的指针在行为上和MRC时代retain的property是比较相似的,系统会在我们当前方法调用结束后销毁对象在方法中生产的强引用指针,其中列举一下几种情况:

代码:

测试对象重新dealloc方法

#import "ReleaseObjectTest.h"

@implementation ReleaseObjectTest
- (void)dealloc
{
    NSLog(@"%s---我释放了",__func__);
}
@end


在controller中有定义了测试对象的实例变量(默认Strong),weak类型属性,Strong类型属性和直接使用局部变量(默认Strong)

</pre></p><p><pre name="code" class="objc">@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>
{
    ReleaseObjectTest *releaseOb;
}
@property (weak,nonatomic)ReleaseObjectTest *weakReleaseOb;;
@property (strong,nonatomic)ReleaseObjectTest *strongReleaseOb;


@property (strong, nonatomic) IBOutlet UITableView *tableView;


@end


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    //1.局部变量,会在viewDidLoad结束后调用ReleaseObjectTest的dealloc方法,对象释放
    
    ReleaseObjectTest *releaseOb = [ReleaseObjectTest new];
    
    //2.实例变量,在viewDidLoad结束后不会调用ReleaseObjectTest的dealloc方法,(页面释放后他才被释放)
    
    releaseOb = [ReleaseObjectTest new];
    
    //3.Strong属性,会在viewDidLoad结束后调用ReleaseObjectTest的dealloc方法,对象释放
    
    self.strongReleaseOb = [[ReleaseObjectTest alloc] init];
    
    //4.weak属性,会在viewDidLoad结束后调用ReleaseObjectTest的dealloc方法,对象释放(属性对象一般不用weak修饰(IBOutlet除外,因为它的对象不在方法中生产,指针被他父视图view持有,释放机制跟父视图有关(具体此处不做解释)),测试需要)
    
    self.weakReleaseOb = [[ReleaseObjectTest alloc] init];

    /*
     *arc 下释放机制总结
     *1.实例变量,局部变量默认都是Strong强引用
     *2.局部变量在方法中释放,默认生产强引用指针,但是在方法结束会指针被回收,该内存没有强引用指针,随之被释放
     *3.实例变量,Strong属性会给对象加一个强引用指针,因此方法结束后对象还有Strong强引用指针,对象不会被释放,只有在页面销毁后指针销毁,随之对象释放
     *4.weak属性,方法调用结束后对象只有weak若引用指针,会被释放
     */
    
}






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值