gpt4 book ai didi

objective-c - 如何使用 ARC 在 NSArray 中存储 CFUUIDRef 对象?

转载 作者:搜寻专家 更新时间:2023-10-30 20:21:54 26 4
gpt4 key购买 nike

我对 ARC 感到困惑。我可以创建 CFUUIDRef,我可以通过 CFRetain 和 CFRelease 管理引用计数。如何将它们添加到 NSArray 并将所有权传递给它?

CFUUIDRef *uuid = ...;

[arr setObject:myobj forKey:(__bridge id)uuid];

[arr removeObjectForKey:(__bridge id)uuid];

id myobj = [arr objectForKey:(__bridge id)uuid];

以上是设置、删除和检索的正确方法吗?如果我从此数组中删除一个条目,CFUUIDRef 会自动释放还是我已经检索每个对象并自己 CFRelease 它们?

最佳答案

我同意@Ken Wong 的回答,但我认为你应该使用 (__bridge_transfer id) 因为你想将 CFUUIDRef 的所有权转移到数组。当从数组中移除或释放数组时,对象将自动释放(但不一定释放)。

NSMutableArray *array = /* assume this exists */;
CFUUIDRef uuid = /* assume this exists */;
[array addObject: (__bridge_tranfer id) uuid];
NSLog(@"Before = %@", uuid);
CFRelease(uuid);

// The CFUUIDRef "lives on" in the array
uuid = (__bridge CFUUIDRef) [array lastObject];
NSLog(@"After = %@", uuid);

// The UUID is deallocated (`uuid` is now an invalid reference)
[array release];

关于objective-c - 如何使用 ARC 在 NSArray 中存储 CFUUIDRef 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8513541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com