【问题标题】:How do I put a pointer to an NSString pointer into a NSDictionary?如何将指向 NSString 指针的指针放入 NSDictionary?
【发布时间】:2013-12-25 21:21:53
【问题描述】:

我想将一个指向 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";
}

谢谢。

【问题讨论】:

  • 不知道为什么要这样做。你可以试试 NSValue。
  • 你能解释一下你想要达到的目标吗?
  • 你不能在 NSDictionary 中放置指向对象的指针。好吧,如果你将它们包装在 NSValue 或 NSData 中,你可以,但为什么呢?

标签: objective-c pointers nsstring nsdictionary


【解决方案1】:

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

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

虽然值得了解将无法以其他方式放入 NSDictionaryNSArray 等的东西的一般概念,但为此目的,我想不出将NSString ** 存储在NSDictionary 中的充分理由,因此最好看看您为什么要这样做,以及是否有更好的方法来实现您的更大目标。

【讨论】:

    【解决方案2】:

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

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

    (如果您对幕后实际发生的事情感到好奇,请查看 __autoreleasing"Transitioning to ARC Release Notes"。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多