objective-c - 我可以通过仅在一个集合中更改存储在两个集合中的对象来更新该对象吗?

标签 objective-c cocoa pointers collections nsdictionary

如果我有这样的东西:

SomeObject *obj = [[SomeObject alloc] init];
obj.someIvar = 100;

NSMuteableArray *arr = [[NSMutableArray alloc] initWithCapacity:10];
[arr addObject:obj];

NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:50];
[dict setValue:obj forKey:@"key"];

[obj release];

我可以像这样更新 obj 吗:

SomeObject *objFromDict = [dict objectForKey:@"key"];
objFromDict.someIvar = 5200;

...并期望 arr 中的对象也被更新?我假设集合正在存储和发出指针。

最佳答案

是的,你说得对。

NSMuteableArray *arrNSMutableDictionary *dict将存储对对象 SomeObject *obj 的引用。当您调用[dict objectForKey:@"key"];时您会在表达式 objFromDict.someIvar = 5200; 中获得此引用您正在修改property someIvar .

当您尝试从arr获取相同的对象时someIvar 的值由于数组和字典仅存储对实例的引用,因此也会发生更改。

关于objective-c - 我可以通过仅在一个集合中更改存储在两个集合中的对象来更新该对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8075425/

相关文章:

python - 在 Python CFFI 中取消引用使用 ffi.addressof 创建的指针(C * - 等效运算符?)

c - MPI_Reduce 是否需要接收缓冲区的现有指针?

ios - 如何在 iOS 中创建类似 UIActionSheet 背景 View 的 View ?

objective-c - 删除 NSTableCellView

cocoa - 使用 NSTreeView 交换 View

objective-c - Cocoa - 暂停一个方法

ios - Touch ID 锁定多长时间? "Biometry is locked out."

objective-c - 正确减去浮点值

iphone - 使用 NSNumberFormatter 从国际货币字符串中获取十进制值

C++ 对象指针