使用#DEFINE语句时是否会失去静态类型?

时间:2012-08-18 21:17:23

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

我在定义时似乎失去了静态输入能力,

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

要做到这一点,

[myAppDelegate doSomething];

Xcode不知道 doSomething 是什么,虽然只要我知道我在做什么就会编译并运行正常,并且myAppDelegate上实际存在 doSomething

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

1 个答案:

答案 0 :(得分:1)

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

  

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

只需使用一个功能:

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

或方法:

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

引入类型安全。

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

使用#define不是一个好的解决方案,imo。