[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):访问被拒绝

尝试使用 GetObject() 获取默认背景颜色;

s3.getObject().createReadStream() :如何捕捉错误?

CPP 中 win32com.client.GetObject() 的等价物是啥?

结果集.getObject 上的 AbstractMethodError

GetObject函数