Sti*_*Sti 1 cocoa-touch pointers objective-c nsobject ios
我知道C/C++和Objective-C之间存在差异,但是当涉及到指针标记时会出现什么情况*
呢?这不是用于Objective-C中的指针,还是用这种语言的所有对象指针?IE,如果我尝试NSString string = @"Hello";
,XCode告诉我使用NSString *string
.这仍然意味着它是指针吗?
假设我有这种标准方法(就像在大多数方法看起来一样):
-(void)method:(NSString*)s;
Run Code Online (Sandbox Code Playgroud)
然后我会发送这样的东西:
NSString *string = @"Hello";
[self method:string];
Run Code Online (Sandbox Code Playgroud)
我会通过执行以下操作来节省数据时间或分配或访问权限吗?
-(void)method:(NSString**)s;
//and use it like this:
NSString *string = @"Hello";
[self method:&string];
Run Code Online (Sandbox Code Playgroud)
还是浪费?如果它们已经是指针,我猜他们会以这种方式指向指针.
?
对象本身不是指针,它们是内存中包含数据的区域.您正在谈论的变量是指向这些对象的指针:
NSString *string = @"Hello";
Run Code Online (Sandbox Code Playgroud)
这里,'string'是指向NSString
文字对象的指针.将此作为变量传递时,您将传递对该对象的引用.NSString
可以编辑对象的内容(如果它是可变对象,则不是),但引用不能.
通过使用NSString **
您添加额外的间接级别.现在你传递一个指向指针的指针.您想要这样做的唯一原因是您希望允许编辑对象(如果有)以及对对象的引用.例如,在调用可选择返回错误的方法时:
NSError *error = nil;
[someone doStuff:(NSString *)string error:(NSError **)error];
Run Code Online (Sandbox Code Playgroud)
现在有人可以实例化NSError
并将其返回给您.
除非这是你的意图,否则你不应该使用指针指针.
归档时间: |
|
查看次数: |
1033 次 |
最近记录: |