如果一个对象的实例变量只是指向其他对象的指针(例如NSString),并且该变量仅包含引用,而不是对象本身,为什么它需要类型?还是为什么它的类型不像“ NSReference”那样,因为它就是它?
例如,摘自《 iOS编程:大书呆子牧场指南》:
在item.h中
#import <Foundation/Foundation.h>
@interface Item : NSObject
{
NSString *_itemName;
NSString *_serialNumber;
int _valueInDollars;
NSDate *_dateCreated;
}
@end
在我看来,每个变量的类型都应该类似NSReference
。如果实例变量仅保留对字符串和date和int位置的引用,而不是对字符串和date和int本身的引用,为什么将实例变量声明为string和date和int呢?
该id
类型是您想要的一种。id
是指向对象的无类型/通用指针。
您可以根据需要使用它,但是使用它有一个主要缺点:编译器将无法验证您是否正确使用了指针。例如:
id foo;
foo = [NSString stringWith....];
...
[foo convertFromPolarToCartesian];
在最后一条指令中,编译器将无法看到这将无法正常工作,因为foo
没有类型,并且它所指向的对象是否能够响应消息仍是未知的(我敢打赌,NSString
没有这种方法)。
尽快检测程序中的错误是非常重要的,并且在编译时发现错误是正确的选择,因此,即使有可能使用通用指针,如果您知道对象的种类,也不要使用它们他们必须指出。这不会涵盖所有可能的错误,而是愚蠢的明显错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句