ios - 使用 #DEFINE 语句时您是否会失去静态类型能力?

标签 ios objective-c xcode c-preprocessor static-typing

我在定义时似乎失去了静态类型能力,

#define myAppDelegate (WorkClockAppDelegate *) [[UIApplication sharedApplication] delegate]

为此,

[myAppDelegate doSomething];

Xcode 不知道 doSomething 是什么,尽管只要我知道我在做什么,它就会编译并运行良好,并且 doSomething 实际上存在于 myAppDelegate 上!

有什么办法可以克服这个问题吗?

最佳答案

您不会丢失它,不 - 您可能省略了 #import,或者 #import 的顺序可能是错误的。

Is there any way I can overcome this?

只需使用一个函数:

WorkClockAppDelegate * myAppDelegate() {
  // TODO add error checking
  return (WorkClockAppDelegate *) [[UIApplication sharedApplication] delegate];
}

或方法:

+ (WorkClockAppDelegate *)workClockAppDelegate {
  // TODO add error checking
  return (WorkClockAppDelegate *) [[UIApplication sharedApplication] delegate];
}

引入类型安全。

虽然您可以使用 extern 变量,但这不太安全。

在我看来,使用#define并不是一个好的解决方案。

关于ios - 使用 #DEFINE 语句时您是否会失去静态类型能力?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12022330/

相关文章:

ios - 我什么时候必须给 Magical Record 一个上下文?

ios - UIGraphicsBeginPDFContextToData 创建 Acrobat 无法读取的 PDF

ios - 重新排序 tableviewcells,右侧白色 "bar"

ios - performSegue 动画完成,什么标识符?

ios - 动画完成 block 运行得太快

objective-c - iPhone 6s plus 设备中的 UIPickerView UI 和功能问题

ios - 如何为AVWriter写入设置CMSampleBuffer的时间戳

xcode - 从 Xcode 4 中的项目中删除 git

objective-c - WiFi 上的 NSNetService 而不是蓝牙

ios - 在 Xcode 的 Storyboard中使用另一个 UIView 创建和加载 View