iOS 单指针,双指针在方法参数中的区别
- 传入单指针,在方法内会复制一个临时的指针副本,在方法内操作的都是这个临时副本
- (instancetype)init{
if (self = [super init]){
// obj 指向对象 A
NSObject *obj = [[NSObject alloc] init]; // 对象 A
[self setObject:obj];
// 这时,obj 还是指向 对象 A
}
return self;
}
- (void)setObject:(NSObject *)obj1{
// obj1 是一个新的指针,跟 指针 obj 同时指向 对象 A
// obj1 指向了新的对象 B , obj 继续指向 对象A
obj1 = [[NSObject alloc] init]; // 对象B
}
- 传入双指针,在方法内会改变方法外 指针的指向
- (instancetype)init{
if (self = [super init]){
// obj 指向对象 A
NSObject *obj = [[NSObject alloc] init]; // 对象 A
// 传入 指针 obj 自己的地址
[self setObject:&obj];
// 这个时候 obj 指向了 新对象 B
}
return self;
}
- (void)setObject:(NSObject *)obj1{
// obj1 是一个临时指针,指向指针 obj 的地址
// *obj1 就是 指针 obj , *obj1 指向新对象 B ,也就是 指针 obj 指向新对象B,改变了外面的指针 obj 的指向
*obj1 = [[NSObject alloc] init]; // 对象B
}
iOS 双指针最常用的就是 NSError
网友评论