首页 > 数组NSMutableDictionary。写入的时候是不同数据,但是里面存的数据变成一样了

数组NSMutableDictionary。写入的时候是不同数据,但是里面存的数据变成一样了

如图,通俗点讲,我把红、黄两个球放入一个箱子里,结果打开箱子一看,里面都是红色的了。

我就一行代码写入数组,没什么复杂的

NSLog(@"写入缓存key:%@ value:%@", key, cell);
[self.cellCache setValue:cell forKey:key];

整个app,我保证只有这里对数组进行写入。

看输出的日志:

写入缓存key:FeedTableCell299 value:<FeedCell: 0x7c133e00; baseClass = UITableViewCell; frame = (8 8; 304 540); hidden = YES; autoresize = W; tag = 299; layer = <CALayer: 0x7b2a6670>>
写入缓存key:FeedTableCell300 value:<FeedCell: 0x7c133e00; baseClass = UITableViewCell; frame = (8 8; 304 636.5); tag = 300; layer = <CALayer: 0x7b2a6670>>

很明显的看到,分别以不同的key,写入不同的value

结果打印这个字典的值出来,傻眼了。

FeedTableCell299 = "<FeedCell: 0x7c133e00; baseClass = UITableViewCell; frame = (0 0; 320 540); autoresize = W; tag = 299; layer = <CALayer: 0x7b2a6670>>";

FeedTableCell300 = "<FeedCell: 0x7c133e00; baseClass = UITableViewCell; frame = (0 0; 320 540); autoresize = W; tag = 299; layer = <CALayer: 0x7b2a6670>>";

键值不变,可是里面的值都变成一样了。这是怎么回事呢?


证明你还没有搞清楚C语言中的pointer这个概念。
在Objective-C当中,你没有搞清楚ARC这个内存管理的概念。

首先,你要搞清楚值传递和引用传递的概念。
然后再去理解,就会一目了然。

这里很明显你存储的数据是一样的,只是用了不同的Key。
如果你还是不明白,你应该问问自己:为什么值会不同,你明明就是存储一样的东西。


很明显,cell复用了,你要这样存就不要复用,不过你这样存的目的是干嘛??


FeedCell的内存是同一个


很明显,你存进去的是同一个cell(地址为0x7c133e00)。cell不同时间进行输出时,它的frame是不一样的。而且你很可能在重用时修改了它的tag值。

【热门文章】
【热门文章】