zoukankan      html  css  js  c++  java
  • iOS学习——weak的应用场景

      OC采用ARC机制,因此strong等属性也有了应用场景。当使用alloc为一个对象在堆中分配内存空间,然后让栈区使用一个强指针指向该内存地址,就能在指针被自动释放签前,保证堆内数据不被释放。那么如果不是用强指针,而是用弱指针执行该堆内存地址,那么在分配内存空间后就会自动释放。

      那么,针对这种运用场景就有一个不同的指针属性。

    @property (nonatomic, strong) UIScrollView *scrollView;
    @property (nonatomic, weak) UIImageView *imgView;
    @end
    
    @implementation ViewController
    - (void)loadView {
        self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
        self.view = self.scrollView;
        //网络数据都是二进制
        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://mpic.tiankong.com/bf0/7f9/bf07f9842b76981cc2cae5d8850bbeaf/640.jpg"]];
        UIImage *image = [UIImage imageWithData:data];
        UIImageView *imgView = [[UIImageView alloc] initWithImage:image];
        self.imgView = imgView;
        [self.scrollView addSubview:self.imgView];
        [self.imgView sizeToFit];
    }
    
    
    
    
    
      在这里我做了几件事,一是在使用loadView将self的view改为scrollView,loadView调用的时候,系统将不再读取SB/Xib文件,所以即便你在xib上做了什么,只要使用loadView就能完全覆盖。二是创建了一个弱指针_imgView。在这里,如果将scrollView的strong改成weak,那么你将在执行[self.view addSubview:imgView];的时候代码崩溃,崩溃的原因显而易见,self.view等于nil,因为self.scrollview是弱指针,[[UIScrollView alloc] initWithFrame:self.view.bounds]创建完后就被释放掉了。但是imgView声明为弱指针却完全没有问题,那是因为在将imgView赋值给self.imgView前,做了[self.view addSubview:imgView],imgView添加到了self.view.subViews这个数组中,查看源码可以发现,subViews也是一个强指针,它指向了imgView这块内存,所以再次使用self.imgView这个弱指针指向该内存时,内存也不会被释放了。用弱指针指向imgVie更带来了一个好处,如果执行删除操作,一般采用removeFromSuperView,即将imgView从subViews中移除,如果self.imgView是强指针,虽然界面上看不到了,但是imgView分配在堆中的内存依然没有被释放,而弱指针指向,在执行remove后就立刻清理掉了这块堆内存。
      ps:网络数据都是二进制——网络数据传输到物理层,而网线使用电流进行传输,电流的高低电频就表示了二进制。
     
  • 相关阅读:
    多字段截取然后验证 js
    web端上传图片,截取证件照
    bootstrap学习
    响应式网站设计心得
    不懂这几个问题就落后了:Python、Android开发者必读!
    这48个Java技术点,让你的面试成功率提升5倍!
    C++之父谈C++:一天之内你就能学会出色使用C++
    常用正则表达式
    解决vs验证控件报错” WebForms UnobtrusiveValidationMode 需要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping”问题
    怎么就那么难啊我去
  • 原文地址:https://www.cnblogs.com/zhulilove/p/7819668.html
Copyright © 2011-2022 走看看