-2

我正在尝试使用我在这篇文章中找到的代码将 NSArray 转换为 NSDictionary: 将 NSArray 转换为 NSDictionary

@implementation NSArray (indexKeyedDictionaryExtension)

- (NSDictionary *)indexKeyedDictionary
{
NSUInteger arrayCount = [self count];
id arrayObjects[arrayCount], objectKeys[arrayCount];

[self getObjects:arrayObjects range:NSMakeRange(0UL, arrayCount)];
for(NSUInteger index = 0UL; index < arrayCount; index++) { objectKeys[index] = [NSNumber numberWithUnsignedInteger:index]; }

return([NSDictionary dictionaryWithObjects:arrayObjects forKeys:objectKeys count:arrayCount]);
}

@end

然而,在 [self get objects:array objects,...] 的行中有一个错误,带有消息:发送“NSString _strong to parameter of type _unsafe_unretained id*”更改指针的保留/释放属性。我认为这是因为 ARC 问题,因为该帖子是在 2009 年发布的。有人知道如何解决这个问题吗?谢谢..

4

1 回答 1

0

解决方案与上面链接Sending "NSString *_strong*to parameter of type _unsafe_unretained id*"中的解决方案几乎相同,更改上面 Ranju Patel 给出的指针的保留/释放属性:

__unsafe_unretained id arrayObjects[arrayCount];
id objectKeys[arrayCount];
[self getObjects:arrayObjects range:NSMakeRange(0UL, arrayCount)];

因为getObject:range:被声明为

- (void)getObjects:(id __unsafe_unretained [])objects range:(NSRange)range;

原因是 ARC 无法管理普通 C 数组中对象的生命周期,因此必须将对象声明为__unsafe_unretained. 这也在“转换到 ARC 发行说明”中的“转换项目时的常见问题”中进行了说明。

于 2013-08-19T05:15:45.140 回答