如何将指向NSString指针的指针放入NSDictionary?

时间:2013-12-25 21:21:53

标签: objective-c pointers nsstring nsdictionary

我想将一个指向NSString指针的指针放入NSDictionary中,当然,再次将其取回。但我无法弄清楚语法。

我认为是像

NSString* myString = @"Hi";
NSString**myStringPointer = myString;

NSDictionary* dictionary = @{@"pointer":myStringPointer};

但这显然不正确。

我正在尝试更改NSString指向选择器内部的字符串。

-(void) updateString:(NSString*) aString {
  aString = @"Hello World";   //
}

-(void) testUpdateString {
  NSString *textString = @"TEST";
  [self updateString:testString];
  // testString still is @"TEST";
}

谢谢。

2 个答案:

答案 0 :(得分:4)

你只能把(指针)放在NSDictionary中从NSObject继承的东西;指向NSString(指针)的指针不是这样的对象。您可以将其包装在NSValue中以将其存储在字典中。

NSDictionary *dictionary = @{ @"pointer": [NSValue valueWithPointer:myStringPointer], };

虽然为了这个目的,在NSDictionary中包装无法放入NSArrayNSValue等内容的一般想法是值得的,我想不出将NSString **存储在NSDictionary中的充分理由,所以最好先看看为什么要尝试这样做以及是否有更好的方法来实现更大的目标

答案 1 :(得分:2)

您不需要这里的字典,您可以通过引用来更新对象 方法:

-(void) updateString:(NSString **) aString {
    *aString = @"Hello World";
}

-(void) testUpdateString {
    NSString *testString = @"TEST";
    [self updateString:&testString];
}

(如果你很好奇幕后实际发生了什么,请查看 "Transitioning to ARC Release Notes"中的__autoreleasing。)