为什么指针需要类型?

Choylton B.Higginbottom

如果一个对象的实例变量只是指向其他对象的指针(例如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呢?

让·巴蒂斯特·尤涅斯(Jean-BaptisteYunès)

id类型是您想要的一种。id是指向对象的无类型/通用指针。

您可以根据需要使用它,但是使用它有一个主要缺点:编译器将无法验证您是否正确使用了指针。例如:

id foo;
foo = [NSString stringWith....];
...
[foo convertFromPolarToCartesian];

在最后一条指令中,编译器将无法看到这将无法正常工作,因为foo没有类型,并且它所指向的对象是否能够响应消息仍是未知的(我敢打赌,NSString没有这种方法)。

尽快检测程序中的错误是非常重要的,并且在编译时发现错误是正确的选择,因此,即使有可能使用通用指针,如果您知道对象的种类,也不要使用它们他们必须指出。这不会涵盖所有可能的错误,而是愚蠢的明显错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么需要指针类型转换?

在C ++中,为什么需要提及指针的类型?

为什么将指针传递给具有常量指针类型参数的函数时不需要类型转换?

如果地图是引用类型,为什么json.Unmarshal需要指向地图的指针?

当返回类型实际上是错误时,为什么需要返回一个指针?

为什么在使用指针初始化用户定义的结构时需要键入强制类型转换?

为什么在指针转换中需要(void *)?

为什么我需要双指针?

为什么以及何时需要双指针?

为什么插入列表需要指向指针的指针

为什么要指定指针类型?

为什么必须指定指针的类型?

指向1D / 2D数组的指针的基本类型是什么,为什么需要双重解引用?

为什么将取消引用的指针传递给指针类型?

为什么在为golang类型实现sort.Interface时不需要方法接收者是指针?

为什么需要布尔返回类型?

为什么在PHP中需要类型提示?

为什么指针类型的行为与结构类型不同?

指向结构的指针数组-为什么需要malloc(),为什么需要直接字段副本?

为什么带有指针参数的成员函数需要指向指针的指针?

为什么重载函数的函数指针需要static_cast?

为什么可变对象不需要双指针?

为什么我们需要把*用作指针

为什么MIPS堆栈指针需要保持双字对齐?

为什么在SFINAE期间需要参数中的指针?

为什么需要双指针?在哪种情况下?

为什么我需要在 C 中用 * 定义对指针的引用?

为什么为涉及指针的类型定义将指针分配给指针是非法的?

为什么不允许使用泛型类型的指针?