[NSDictionary getObjects:andKeys:] 示例
Posted
技术标签:
【中文标题】[NSDictionary getObjects:andKeys:] 示例【英文标题】:Example of [NSDictionary getObjects:andKeys:] 【发布时间】:2010-05-24 00:21:12 【问题描述】:我找不到[NSDictionary getObjects:andKeys:]
方法的工作示例。我能找到的唯一example 无法编译。我在此处提供了错误/警告,以防有人正在搜索它们。
我感到困惑的原因是 NSDictionary 上的大多数方法都返回 NSArray
。但是,在documentation 中声明此方法的输出变量作为 C 数组返回。
如果您遵循链接的示例,您可能会收到以下错误消息/警告:
NSDictionary *myDictionary = ...;
id objects[]; // Error: Array size missing in 'objects'
id keys[]; // Error: Array size missing in 'keys'
[myDictionary getObjects:&objects andKeys:&keys];
for (int i = 0; i < count; i++)
id obj = objects[i];
id key = keys[i];
.
NSDictionary *myDictionary = ...;
NSInteger count = [myDictionary count];
id objects[count];
id keys[count];
[myDictionary getObjects:&objects andKeys:&keys]; // Warning: Passing argument 1 of 'getObjects:andKeys:' from incompatible pointer type.
for (int i = 0; i < count; i++)
id obj = objects[i];
id key = keys[i];
我将提供一个可行的解决方案来回答这个问题。
【问题讨论】:
【参考方案1】:这是使用此方法的正确方法:
NSDictionary *myDictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"1", @"A", @"2", @"B", nil];
NSInteger count = [myDictionary count];
id objects[count];
id keys[count];
[myDictionary getObjects:objects andKeys:keys];
for (int i = 0; i < count; i++)
id obj = objects[i];
id key = keys[i];
NSLog(@"%@ -> %@", obj, key);
【讨论】:
我需要释放 obj 和 key 吗? 以防万一有人想知道你为什么不需要发布任何东西(这是在早期开发中杀死我的东西),因为没有分配任何东西。未分配内存 = 无需释放内存。很明显,但如果我在几个月前看到这个,我不知道你为什么不使用 release :) 在此代码上使用 ARC 会生成“将 '__strong id *' 发送到 '__unsafe_unretained id *' 类型的参数更改指针的保留/释放属性。【参考方案2】:在 ARC 下,解决方案需要修改如下(__unsafe_unretained 添加到数组定义中):
NSDictionary *myDictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"1", @"A", @"2", @"B", nil];
NSInteger count = [myDictionary count];
id __unsafe_unretained objects[count];
id __unsafe_unretained keys[count];
[myDictionary getObjects:objects andKeys:keys];
for (int i = 0; i < count; i++)
id obj = objects[i];
id key = keys[i];
NSLog(@"%@ -> %@", obj, key);
【讨论】:
以上是关于[NSDictionary getObjects:andKeys:] 示例的主要内容,如果未能解决你的问题,请参考以下文章
通过 Lambda 到 GetObject 的 Cognito 身份验证角色 - 调用 GetObject 操作时发生错误 (AccessDenied):访问被拒绝
s3.getObject().createReadStream() :如何捕捉错误?
CPP 中 win32com.client.GetObject() 的等价物是啥?