我想声明一个指向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?
}
是否有可能以某种方式声明指向指针的指针?或者我错过了什么?
答案 0 :(得分:24)
您几乎从未想过这样做,一个典型的例外是您希望将引用作为可填写的参数传递。请参阅在整个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建立连接。如果这不能解决您的问题,您需要告诉我们您真正想要做的是什么。
答案 1 :(得分:5)
声明为:
NSURLConnection **primaryConnection;
将其设为:
primaryConnection = &conn;
这是普通的C东西,并不是Objective-C特有的。要访问primaryConnection,您需要在向其发送消息之前取消引用它:
NSURLConnection * theConn = *primaryConnection;
[theConn doSomethingElse];
请注意,尽管您粘贴了源代码,但这可能不安全。看来你想在一个线程上有doSomething
,访问本地变量,并且正在使用其他线程的primaryConnection
来获取对该局部变量的引用?为什么不把它变成一个普通的实例变量?
答案 2 :(得分:0)
在设置 conn 之前,将 conn 的指针值分配给 primaryConnection ,以便 conn ,从而 primaryConnection 可能会指向垃圾。
请记住,在将NSURLConnection对象存储为实例变量之前必须保留NSURLConnection对象,否则该对象可能会提前释放。因此,释放旧的 primaryConnection ,然后为其分配一个新对象,同时保留新对象。
答案 3 :(得分:0)
在将conn设置为您想要的位置后,您需要将其设置为conn。