首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在objective-c中实例化指针

如何在objective-c中实例化指针
EN

Stack Overflow用户
提问于 2016-02-16 22:27:49
回答 3查看 434关注 0票数 0

假设我有一个指向ICScannerDevice类类型的指针,我已经为它分配了一些内存。现在,我想用ICScannerDevice的父类ICDevice类型的指针初始化它。我该怎么做呢?

下面的方法正确吗?我想不是的!

代码语言:javascript
运行
复制
ICScannerDevice* scannerDevice = [[ICScannerDevice alloc] init];
scannerDevice = (ICScannerDevice*)device; // device is a pointer to ICDevice.
EN

Stack Overflow用户

发布于 2016-02-17 02:04:17

假设我有一个指向ICScannerDevice类类型的指针,我已经为它分配了一些内存。

ICScannerDevice* scannerDevice = [ICScannerDevice分配初始化];

你在这里把两样东西混在一起。变量是由声明创建的,声明也可以包含初始化表达式。

当您声明一个变量空间时,分配的变量空间可以包含变量类型的值-无论该类型是int,在这种情况下,值将是一个整数,例如42ICScannerDevice *,在这种情况下,该值将是对已分配的ICScannerDevice对象的引用。

所以声明:

代码语言:javascript
运行
复制
ICScannerDevice* scannerDevice

提供存储ICScannerDevice *类型的值所需的所有空间。您给出的初始化表达式:

代码语言:javascript
运行
复制
[[ICScannerDevice alloc] init];

在您的情况下是多余的(并且是浪费的),您不希望创建ICScannerDevice类型的对象并在scannerDevice中存储对该对象的引用,因为您希望在变量中存储完全不同的引用:

现在,我想用ICDevice类型的指针初始化它,这是ICScannerDevice的父类。

scannerDevice = (ICScannerDevice*) device;// device是指向ICDevice的指针。

这是错误的,因为您声明device持有对ICDevice对象的引用。因为类型ICDeviceICScannerDevice的父类,所以对ICScannerDevice的引用可以被视为对ICDevice的引用-也就是“向上转换”。

然而,已知是ICDevice类型的对象的引用可能是也可能不是对ICScannerDevice的引用,例如,对ICPlotterDevice的引用。所以你不能直接强制转换--也就是“向下转换”和赋值。

You 必须先检查您是否有一个对ICScannerDevice的引用。为此,您可以使用方法isKindOfObject:检查被引用对象的类型是否为ICScannerDevice类型,并使用class方法获取该类型:

代码语言:javascript
运行
复制
if ( [device isKindOfObject:[ICScannerDevice class]] )
{
   // we have a reference to an ICScanner Device
   scannerDevice = (ICScannerDevice *)device;  // downcast and assign
    ...
}
else
{
   // device references something other than an ICScannerDevice object
   // handle this case
   ...
}

您还需要处理存储在device中的值为nil的情况-即它不引用任何内容。您可能只想将其与if中的测试组合在一起,并将其视为ICScannerDevice引用:

代码语言:javascript
运行
复制
if ( (device == nil) || [device isKindOfObject:[ICScannerDevice class]] )

或者,您可能需要以其他方式处理它。

HTH

票数 3
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35435155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档