Objective C 这两个 return 应该是同一个值

Objective C should these two return the same value

下面代码中notificationIdToCancle1notificationIdToCancle2有什么区别:

NSDictionary* parameters = (NSDictionary* )parametersObject;
if (parameters != nil) {

    NSString* notificationIdToCancle1 = (NSString* )[parameters objectForKey:@"id"];
    NSString *notificationIdToCancle2 = [NSString stringWithFormat:@"%@",[parameters valueForKey:@"id"]];
}

两者不应该包含相同的值吗?

NSString* notificationIdToCancle1 = (NSString* )[parameters objectForKey:@"id"];

这一行是抓取字典中的对象,无论它是否存在,都将其转换为 NSString。

[NSString* stringWithFormat:@"%@",[parameters valueForKey:@"id"]];

这一行,我认为你有误,你可能不想要第一个'*'。您可能还想调用 'objectForKey:' 而不是 'valueForKey:'。 objectForKey: 将 return 字典中的条目,而 valueForKey: 将使用键值编码 return 一个值。

所以:

[NSString stringWithFormat:@"%@",[parameters objectForKey:@"id"]];

这会获取字典中的对象,在其上运行 'description',其中 return 是一个 NSString 实例。所以你肯定会从中得到一个 NSString 实例。