【问题标题】:how to declare variable of NSString with double pointer如何用双指针声明 NSString 的变量
【发布时间】:2013-02-28 22:14:39
【问题描述】:

我想使用双指针,我试图这样声明。

NSString **a;

但是,Xcode 向我显示了错误“指向非常量类型 'NSString *' 的指针没有明确的所有权”并且无法编译。

我终于想做这个了。

NSString **a;
NSString *b = @"b";
NSString *c = @"c";
a = &b;
*a = c;

NSLog(@"%@",b);//I wanna see "c"

请告诉我任何建议。

【问题讨论】:

  • 您显示的代码完全合法。如果没有更多上下文,我认为我们无法回答您的问题。
  • @CarlNorum 除非自动-"smartass"-reference-counting 出现在图像中...然后它使编译器抱怨每一个小动量...
  • 哦,我明白了...忘记了。 ARC 比我停止编写任何 Objective-C 代码时更新。
  • @CarlNorum 你很幸运......我们可以同意这里的答案应该是“关闭 ARC”吗?
  • 请注意,在 Objective-C 中使用**s 来引用对象是非常罕见的。此外,@H2CO3,ARC 的目标之一是使不常见、脆弱的编码模式(通常会导致错误)在声明中非常精确。这是其中一种情况。 “关闭 ARC”不是建设性的建议;我们中的许多人已经完全接受了 ARC,并且看到代码的脆弱性大大降低,这正是因为编译器能够在其分析中更加彻底。

标签: ios objective-c variables automatic-ref-counting double-pointer


【解决方案1】:

更改为这样,您就可以明确指定所有权:

NSString *__strong *a;
NSString *b = @"b";
NSString *c = @"c";
a = &b;
*a = c;

NSLog(@"%@",b);//I wanna see "c"

输出:

 c

Here is the documentation 在 __strong 上。

【讨论】:

  • 谢谢!是的,这是完美的答案:)
  • 我见过一堆带有 Type** 名称声明的 objc 代码。是否已弃用?
猜你喜欢
  • 2021-12-29
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多