• 关于数组中加入相同的view的试验


    随便新建一个工程,然后在控制器中粘贴如下代码

    - (void)viewDidLoad {

        [super viewDidLoad];

        UIView * view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];

        view.backgroundColor = [UIColor greenColor];

        NSArray * arr = [[NSArray alloc]initWithObjects:view, view, nil];

        NSLog(@"====-----%@",arr);

        

        UIView * view1 = arr[0];

        view1.frame = CGRectMake(0, 100, 100, 100);

        [self.view addSubview:view1];

        

        UIView * view2 = arr[1];

        view2.frame = CGRectMake(0, 100, 20, 20);

        [self.view addSubview:view2];

        

        UIView * view3 = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)];

        view3.backgroundColor = [UIColor blueColor];

        [self.view addSubview:view3];

        UIView * view4 = [[UIView alloc]initWithFrame:CGRectMake(0, 300, 200, 200)];

        view4.backgroundColor = [UIColor redColor];

        [self.view addSubview:view4];

            

    //    [view3 addSubview:view1];

    //    [view3 addSubview:view2];

    //一个view 只能加到最后一个 父控件上

        [view4 addSubview:view2];

        [view3 addSubview:view1];

    }

    运行后 的打印如下

    ====-----(

        "<UIView: 0x7fc8cdd01760; frame = (0 0; 100 100); layer = <CALayer: 0x600001cacfa0>>",

        "<UIView: 0x7fc8cdd01760; frame = (0 0; 100 100); layer = <CALayer: 0x600001cacfa0>>"

    )

     

    也就是说 虽然 数组中有两个元素  但是两个元素的地址 全都指向了同一块内存  也就是  view所在的内存。

    简单理解为 数组存了 这个view对象的 指针, 通过  arr[0] 和 arr[1]拿到的都是同一个view。 

    所以最后 加到view3 上一个view  加到view4上一个view   加的都是同一个。 而同一个view只能加到一个superview上 ,之前加的自动失效  或者可以理解为 自动被remove后 然后  加到新的 superView上。所以运行模拟器 就有了 一下的现象

  • 相关阅读:
    基数排序学习
    桶排序学习
    计数排序-不基于比较O(n)
    基尼系数
    拉普拉斯进行特征选择
    int ,long long等范围
    Codeforces780C
    51 Nod 1119
    字典树入门
    POJ 2531 暴力深搜
  • 原文地址:https://www.cnblogs.com/isItOk/p/4886469.html
Copyright © 2020-2023  润新知