【问题标题】:Overwriting object… is this OK?覆盖对象……这样可以吗?
【发布时间】:2015-01-23 17:01:43
【问题描述】:

关于类对象的一般性两部分问题。

1) 定义一个对象是否有问题,比如 NSArray 或 UIImage,然后用其他内容覆盖内容?例如:

NSArray *usersInApp=[[NSArray alloc] initWithObjects:@"Barry",@"Horace",@"Marjorie",nil];
...
usersInApp=@[@"Elizabeth",@"Eddie"];
...
NSArray *newUsers=@[@"Beth",@"Axl"];
usersInApp=[NSArray arrayWithArray:newUsers];

2) 如果将一个实例设置为另一个实例(例如,如果最后一行是 usersInApp=newUsers;),这是否意味着两个变量(usersInAppnewUsers)将引用相同的值?

感谢阅读。

【问题讨论】:

  • 是什么让您认为覆盖变量值不合适?
  • 嗨@Popeye,我认为这可能没问题,但想确定一下。我想我担心的是,如果我重写了指向他们的指针,Barry、Horace 等人是否还会被卡在某个地方。
  • usersInApp = [新用户复制];是一种更简单的说法 [NSArray arrayWithArray:...]。与给定 @[...] 的赋值相比,复制可能会感觉效率低下,但如果没有必要,它实际上不会“复制”。

标签: ios objective-c memory memory-leaks nsarray


【解决方案1】:

答案:

1) 没有。

2) 是的。

问题:但是您为什么不在调试器的帮助下自己尝试一下呢?

【讨论】:

  • 嗨@dasdom,好的,感谢您确认这一点。我已经在各种应用程序中对此进行了测试,但我只是想吸引各种人的经验,看看我是否遗漏了什么。
【解决方案2】:

您根本没有覆盖对象。您正在覆盖指向对象的指针(对对象的引用)。这绝对没问题。

  1. 正确。两个变量都引用同一个对象。

【讨论】:

    猜你喜欢
    • 2012-12-19
    • 1970-01-01
    • 2016-03-26
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 2015-11-17
    相关资源
    最近更新 更多