Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios objective-c中的所有对象都是指针吗?_Ios_Objective C_Cocoa Touch_Pointers_Nsobject - Fatal编程技术网

Ios objective-c中的所有对象都是指针吗?

Ios objective-c中的所有对象都是指针吗?,ios,objective-c,cocoa-touch,pointers,nsobject,Ios,Objective C,Cocoa Touch,Pointers,Nsobject,我知道C/C++和Objective-C之间有区别,但指针标记*是什么情况?这不是用于Objective-C中的指针,还是所有对象都是这种语言中的指针? 也就是说,如果我尝试NSString=@“Hello”,XCode告诉我改用NSString*string。这是否仍然意味着它是指针 假设我有这个标准方法(如中所示,这是大多数方法的外观): 然后我会发送这样的邮件: NSString *string = @"Hello"; [self method:string]; -(void)metho

我知道C/C++和Objective-C之间有区别,但指针标记
*
是什么情况?这不是用于Objective-C中的指针,还是所有对象都是这种语言中的指针? 也就是说,如果我尝试
NSString=@“Hello”,XCode告诉我改用
NSString*string
。这是否仍然意味着它是指针

假设我有这个标准方法(如中所示,这是大多数方法的外观):

然后我会发送这样的邮件:

NSString *string = @"Hello";
[self method:string];
-(void)method:(NSString**)s;

//and use it like this:
NSString *string = @"Hello";
[self method:&string];
我是否会通过这样做来节省数据时间、分配或访问或任何事情:

NSString *string = @"Hello";
[self method:string];
-(void)method:(NSString**)s;

//and use it like this:
NSString *string = @"Hello";
[self method:&string];
还是浪费?如果它们已经是指针,我猜它们会以这种方式指向指针


对象本身不是指针,而是内存中包含数据的区域。您所说的变量是指向这些对象的指针:

NSString *string = @"Hello";
这里,“string”是指向
NSString
literal对象的指针。当将其作为变量传递时,就是传递对对象的引用。对象的内容(如果它是可变对象,
NSString
不是)可以编辑,但引用不能编辑

通过使用
NSString**
您添加了一个额外级别的间接寻址。现在您正在将一个指针传递给一个指针。您希望这样做的唯一原因是,您希望允许编辑对象(如果有)以及对对象的引用。例如,调用可选返回错误的方法时:

NSError *error = nil;
[someone doStuff:(NSString *)string error:(NSError **)error];
现在有人可以实例化一个
n错误
,并将其返回给您


除非您有意,否则不应使用指针对指针。

是的。与C++不同,不能静态创建对象。尝试编译第一个字符串并查看错误消息。