在我的子视图控制器中,我有一个属性定义为:
@property (nonatomic, copy) NSString *name;
在视图控制器 A(父级)中,我有以下内容:
NSString *temp = currency.name; //This is because currency is a Core Data Managed Object.
//I wanted to make sure it wasn't a confounding factor.
childViewController.name = temp;
if(childViewController.name == temp)
NSLog(@"I am surprised");
问题是该if
语句找到等效性并且打印了“我很惊讶”。我认为==
应该检查它们是否是同一个对象,并且copy
在属性声明中使用 of 应该确保 setter 正在制作副本。我检查了调试器,它们都指向同一个字符串。(我认为这是不可变的,这可能就是为什么会发生这种情况?)
即使我写作也会发生同样的事情childViewController.name = [temp copy];
,这让我感到震惊!
谁能解释这里发生了什么?
编辑:我在这里删除了一些担心循环引用的问题,我意识到这不是问题。