关于数组中加入相同的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上。所以运行模拟器 就有了 一下的现象

原文地址:https://www.cnblogs.com/isItOk/p/4886469.html