指向objective-c中的指针的指针?

指向objective-c中的指针的指针?,objective-c,pointers,Objective C,Pointers,我想声明一个指向objective-c中指针的指针 我有一个实例变量(primaryConnection),它应该动态更新,以便在局部变量发生变化时指向它 NSURLConnection *primaryConnection; -(void) doSomething { NSURLConnection *conn; primaryConnection = conn; conn = // set by something else // primaryConnection s

我想声明一个指向objective-c中指针的指针

我有一个实例变量(primaryConnection),它应该动态更新,以便在局部变量发生变化时指向它

NSURLConnection *primaryConnection;

-(void) doSomething
{
  NSURLConnection *conn;
  primaryConnection = conn;

  conn = // set by something else

  // primaryConnection should now reflect the pointer that conn is pointing to, set by something else... but it doesn't?
}

是否可以以某种方式声明指向指针的指针?还是我遗漏了什么?

在设置conn之前,将conn的指针值分配给primaryConnection,因此conn和primaryConnection可能会指向垃圾


请记住,在将NSURLConnection对象存储为实例变量之前,必须保留该对象,否则该对象可能会提前释放。因此,请释放旧的primaryConnection,然后为其分配一个新对象,但同时保留新对象。

在将conn设置到所需位置后,需要将其设置为conn。

将其声明为:

NSURLConnection **primaryConnection;
设置为:

primaryConnection = &conn;
这是纯C语言的东西,不特定于Objective-C。要访问primaryConnection,您需要在向其发送消息之前解除对它的引用:

NSURLConnection * theConn = *primaryConnection;
[theConn doSomethingElse];

请注意,尽管从粘贴的源代码中可以看出,这可能不安全。似乎您希望在一个线程上有
doSomething
,访问一个局部变量,并且正在从其他线程使用
primaryConnection
来获取对该局部变量的引用?为什么不把它变成一个普通的实例变量呢?

你几乎从来都不想这样做,一个典型的例外是当你想把一个引用作为一个可以填充的参数传递时。请参阅整个API中
(NSError**)
的使用

特别是,您不希望将实例变量声明为
NSConnection**
,然后将其设置在其他地方;在物体之外的某处。这完全破坏了封装,这肯定表明您的代码设计得很糟糕,或者至少设计得很奇怪

请尝试以下方法:

@interface MyClass:NSObject
{
    NSConnection *connection;
}

@property(retain) NSConnection *connection;
@end

@implementation MyClass
@synthesize connection;
@end
在需要设置连接的任何类/代码中:

@implementation SomeOtherClass
- (void) configureConnection: (MyClass *) anObject
{
    NSConnection *aConnection;

    aConnection = ... initialize the connection ...

    anObject.connection = aConnection;
}
@end

这将保留封装并允许其他东西为MyClass设置连接。如果这不能解决您的问题,您需要告诉我们您真正想做的是什么。

请参阅我的答案;几乎可以肯定,提出问题的人出于错误的原因想要一个指向一个指针的指针。