iOS 5 SDK 中关于使用不兼容的指针类型初始化的新编译器警告

Posted

技术标签:

【中文标题】iOS 5 SDK 中关于使用不兼容的指针类型初始化的新编译器警告【英文标题】:New compiler warning in iOS 5 SDK about initializing with incompatible pointer types 【发布时间】:2011-10-25 20:31:25 【问题描述】:

此声明

drawTimebar *drawView = [drawTimebarView initWithFrame:drawTimebarView.frame];

ios 4 中运行良好,但使用 iOS 5 SDK 时会发出警告:

使用“UIView *”类型的表达式初始化“drawTimebar *”的不兼容指针类型

为什么会发生这种变化,我能做些什么来解决它?

【问题讨论】:

附带说明,您的类名应该始终大写。这是 obj-c 中的标准约定。 【参考方案1】:

突出的一点是您将变量声明为drawTimebar,但初始化并分配了drawTimebarView

【讨论】:

【参考方案2】:

首先,类名应始终以大写字母开头,并且是驼峰式。这有助于其他人阅读您的代码并帮助您跟踪实例与类。

其次,你声明drawViewdrawTimeBar的一个实例(大概这是一个类,所以它真的应该是DrawTimeBar)用这个位

drawTimebar *drawView

但是,当您初始化指针时,您正在使用该位创建drawTimeBarView 的实例(可能也是一个类,因此应该是DrawTimeBarView

[drawTimebarView initWithFrame:drawTimebarView.frame];

警告是让您知道您不一致。我的猜测是你真的想拥有

drawTimebarView *drawView = [drawTimebarView initWithFrame:drawTimebarView.frame];

【讨论】:

另一点是[drawTimebarView initWith...] 有问题,虽然具体是什么还不清楚。它要么是名称错误的类方法,类名大写错误,要么是(可能)未分配实例的无效初始化。还是……? 您好 PengOne,感谢您的回答,但不幸的是它不起作用。我会试着解释我在这里做什么。我使用了一些从互联网上抓取的代码,所以请原谅任何错误或约定错误。 drawTimeBarView 是我父视图中的 UIView,而 drawTimeBar 是该视图的类。我正在尝试初始化此类,以便可以在 drawTimeBarView 中绘制一些东西。它工作正常,但它只是在 XCode 中给出了这个错误。真的不明白出了什么问题。问候

以上是关于iOS 5 SDK 中关于使用不兼容的指针类型初始化的新编译器警告的主要内容,如果未能解决你的问题,请参考以下文章

Stripe iOS SDK - 发送不兼容的块指针类型

在 iOS 7 之前的项目中编译警告“不兼容的指针类型初始化 'UIImage *' 使用类型为'CIImage * _Nullable”的表达式

使用类型表达式初始化 'void(^)(struct ALAssetsGroup *, BOOL *)' 的不兼容块指针类型

使用 UItableViewCell 类型的表达式初始化“CustomCellView *”的不兼容指针类型

“指向使用 'NSNumber *' 类型的表达式初始化 'int' 的整数转换的不兼容指针”

使用“__kindof NSManagedObject * _Nonnull”类型的表达式初始化“NSEntityDescription *”的不兼容指针类型