所以我有类似的东西:
- (void) printString:(NSString *)string
{
NSLog(@"%@", string);
}
NSString *string = @"Blach";
[self printString:string];
string
会通过值或引用传入吗?怎么样的NSError?
NSError *error = [NSError errorWithDomain:someDomain
code:-101
userInfo:someInfo];
-(NSString *) doSomething:(BOOL) val withError:(NSError **)error {
if(!val)
{
*errorPtr = [NSError errorWithDomain:something
code:-101
userInfo:someInfo];
}
}
答案 0 :(得分:5)
你可以永远通过指针以外的任何东西来引用Objective-C对象,因此对于所有意图和目的,一切都是通过引用传递的。也就是说,实际的指针值是按值传递的,就像在C中一样。
答案 1 :(得分:1)
Objective-C中所有类型的内容都是仅按值传递。
问题是无效的,因为“对象”不是Objective-C中的值,因此无法“传递” - 您不能拥有其值“是对象”的变量或表达式(不允许使用裸对象类型)语言) - 相反,必须始终在指向对象的指针后面操纵“对象”。由于“对象”不是值,你不能“传递”它们,因此询问它们是“按值传递”还是“按引用传递”是没有意义的。
答案 2 :(得分:0)
通过引用传递对象。在我看来,重要的区别在于被调用方法是否具有与调用者相同的对象的引用,或者它是否具有副本。它引用了同一个对象。
如果对象是可变的并且被调用的方法使其变异,它也会影响调用者所拥有的对象(因为它是同一个对象)。
对于NSError**
参数,它实际上是通过引用传递的指针(不是对象)。具有这种参数的方法实际上可以修改调用者的指针,使其指向不同的对象。