美文网首页
心路历程总结第一天

心路历程总结第一天

作者: RunningTeemo | 来源:发表于2018-03-16 14:07 被阅读0次

    1、@autoreleasepool用法,为了让一些耗内存的操作提前释放,比如SDImage中的从磁盘读取图片就是写在autoreleasepool中

    @autoreleasepool {
                UIImage *diskImage = [self diskImageForKey:key];
                if (diskImage && self.shouldCacheImagesInMemory) {
                    NSUInteger cost = SDCacheCostForImage(diskImage);
                    [self.memCache setObject:diskImage forKey:key cost:cost];
                }
                dispatch_async(dispatch_get_main_queue(), ^{
                    doneBlock(diskImage, SDImageCacheTypeDisk);
                });
            }
    

    而对于下列这种情况

    - (void)playWithDog{
        Dog *dog = nil;
        @autoreleasepool{
            dog  = [Dog new];
        }
        NSLog(@"111111111");
    }
    
    - (instancetype)init{
        if (self=[super init]) {
            NSLog(@"小狗被派出去啦!初始引用计数为");
        }
        return self;
    }
    
    
    - (void)dealloc
    {
        NSLog(@"小狗回到了宠物中心");
    }
    
    打印如下
    
    2018-03-16 14:11:19.913446+0800 Pointer[48738:493873] 小狗被派出去啦!初始引用计数为
    2018-03-16 14:11:21.740969+0800 Pointer[48738:493873] 111111111
    2018-03-16 14:11:22.808060+0800 Pointer[48738:493873] 小狗回到了宠物中心
    

    则是new的时候,执行init,playWithDog方法结束的时候执行Dog的dealloc方法。

    接着说到dealloc中的意义。 非arc中的意义

    释放自身的实例变量,
    移除观察者,
    停止timer,
    移除通知,
    代理置空等。
    注意MRC 下dealoc 方法一定要在最后写
    [super dealloc];
    

    而arc中
    系统会帮助我们释放该对象所包含的实例变量,但是有些对象还是需要们自己去释放的(比如Core Foundation框架下的一些对象),另外通知中观察者的移除,代理置空,停止timer等
    示例如下所示:
    一定不能有 [super dealloc];(我认为是系统已经帮我们执行了[super dealloc])

    - (void)dealloc
    {
        [[NSNotificationCenter defaultCenter]                      removeObserver:self];//移除通知观察者
        [[XMPPManager sharedManager]                               removeFromDelegateQueue:self];//移除委托引用
        [[MyClass shareInstance]  doSomething ]//其他操作
        scrollView.delegate = nil;
        [timer invalidate];  
    }
    

    相关文章

      网友评论

          本文标题:心路历程总结第一天

          本文链接:https://www.haomeiwen.com/subject/vcolqftx.html