我首先学习了Swift,也许这应该是在学习Obj-C之后,所以现在我尝试完全了解Obj-C,以下问题出了点麻烦:
Obj-C变量
NSInteger score = 556;
NSString *name = @"matt";
在Swift中,变量都是一样的
var score = 556
var name = "matt"
为什么Objective-c使用字符串*尽管不使用整数*为什么会有这样的不同?它与运行时间有关吗?
你能用实际例子向我解释吗?谢谢
如果您了解Swift中值类型和引用类型之间的区别,那么在Objective-C中使用指针只是表示引用类型。
在分配期间,将复制以下任一值:
// swift
var score = 10
// obj-c
NSInteger score = 10;
或引用被复制,或者换句话说,我们不是在分配值本身,而是指向值的指针:
// swift
class MyObject {}
var object = MyObject();
// obj-c
@interface MyObject: NSObject
@end
MyObject *object = [[MyObject alloc] init];
还要注意,在Objective-C字符串(NSString
)中,数组(NSArray
)和类似的都是引用类型。即使是数值类型(NSInteger
)的数字类型也具有引用类型包装器(例如NSNumber
),因为否则您不能将它们放入数组中。偶null
数值具有相应的引用类型NSNull
。
当然,即使使用值类型,也可以使用指针:
NSInteger score = 10;
NSInteger *scorePointer = &score; // assign pointer to score
*scorePointer = 20; // change value of score through the pointer
NSLog(@"%@", @(score)); // 20
同样,您也可以具有指向其他指针的指针,这在许多情况下很有用(例如inout方法参数)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句