美文网首页
关于OC可变数组的问题

关于OC可变数组的问题

作者: 一米押金 | 来源:发表于2017-02-15 08:41 被阅读0次

    昨天做到的是有一个需求,就是,如图:


    在请求数据下来之后,顶部的title不会展示“热门”这个菜单的内容,但是内容cell有内容,必须得展示,swift是这么写的(可能代码词汇记忆错误,但是大体上是如此的)

    var tempArr = response.groups
    tempArr.removefirest()
    self.gameView.groups = tempArr
    

    我用OC也单纯的照葫芦画瓢了

    NSMutableArray *tempArr = [[NSMutableArray alloc]init];
    tempArr = self.response.groups;
    [tempArr removeObjectAtIndex:0];
    self.menuView.groups = tempArr;
    

    然而结果就是内容cell也把“热门”给删除了,但是找原因的时候,是不是这两个数据关联是不是一样的,是不是因为单例原因,或者说早期是
    NSMutableArray *tempArr = self.response.groups,没有初始化这个可变数组造成的,想了很多原因,甚至打断点,看哪里发生了变化,甚至自己设置的set方法,最后发现一个破绽就是,我改变tempArr的时候,self.response.groups的值也发生了变化,然后就看他们的地址,地址竟然都是一样的!那么问题发现:
    tempArr = self.response.groups;这句话不仅仅是传值,也是传地址,也就是---“深拷贝”,所以无论谁的值发生变化都会改变,这点跟swift是不一样的,所以解决办法,只能如此:

    #pragma mark -- 因为数组的拷贝,是深拷贝,连地址都拷贝都是一样的,所以解决办法只能是遍历(根据swift的有感,swift的语法就很简单,就这么单纯传值,地址都不同)
            NSMutableArray *tempArr = [[NSMutableArray alloc]init];
            for (int i=1; i<self.response.groups.count; i++) {
                [tempArr addObject:self.response.groups[i]];
            }
            self.menuView.groups = tempArr;
        }];
    

    由于第一个元素不要直接从i=1开始遍历即可

    相关文章

      网友评论

          本文标题:关于OC可变数组的问题

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