• 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:网络数据都是二进制——网络数据传输到物理层,而网线使用电流进行传输,电流的高低电频就表示了二进制。
     
  • 相关阅读:
    IDEA下Maven的pom文件导入依赖出现Auto build completed with errors
    org.apache.jasper.JasperException: java.lang.NullPointerException
    Eclipse下导入web项目(Some projects cannot be imported because they already exist in the workspace)
    JS中构造函数的方法定义在原型对象里
    JS变量赋值
    JDBC以及连接池连接MySQL出现时区错误问题
    chrome中如何截取整个网页
    java中final、super、static关键字的使用
    初识less
    根据当前时间显示问候语
  • 原文地址:https://www.cnblogs.com/zhulilove/p/7819668.html
Copyright © 2020-2023  润新知