ios - Objective C 中的数据类型和声明

标签 ios objective-c

我曾尝试研究这个主题,但我一无所获,

假设我在 .h 中声明了一个属性,如下所示:

@property (strong, nonatomic) UIViewController *rootViewController;

然后在我的 .m 中说我已经像这样分配和初始化了:

self.rootViewController = [[MyCustomViewControllerClass alloc] initWithNibName:@"MyCustomViewControllerClass" bundle:nil];

这似乎可以正确编译和工作,但是我真的很好奇将属性类型声明为父类(super class) UIViewController,但将 Alloc 和初始化声明为 UIViewController MyCustomViewControlerClass 的子类意味着什么?

谢谢!

最佳答案

最终结果是您可以分配 UIViewController 的任何子类到该属性,因为 UIViewController 的任何子类将具有与基 UIViewController 相同的所有方法和属性,但是,Xcode 会提示您尝试访问的任何方法或属性不在基础上 UIViewController .

在运行时,这不会成为问题,只要您实际分配给它的内容响应这些消息...但更好的编程建议您至少编写一个协议(protocol),其中包括这些方法/属性并将属性标记为符合该协议(protocol)。在这种情况下,您可以使用 @property NSObject<FooProtocol> *iVar; Xcode 不会提示调用 FooProtocol 中的任何方法/属性,但如果它符合 FooProtocol,它也只会让您将对象分配给该属性。 .

好的编程要求您以编译器甚至不标记警告的方式编写代码。它会迫使您代码的任何 future 维护者停下来挠头,弄清楚它是否应该修复(并且它是应该修复的东西)。

关于ios - Objective C 中的数据类型和声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21355124/

相关文章:

ios - 优化 iOS 中的多个异步图片下载

ios - 无法在 XCode 7 beta 2 中调试

ios - 如何在iOS中获取两个已知子字符串之间的子字符串?

ios - UIView、Swift 上的深度页面转换

ios - 将UitableViewCell分成两种颜色

ios - UITableViewCell 内的 UITextField : becomeFirstResponder in didSelectRowAtIndexPath

ios - 问题 : live updating labels/progress bars using Swift

ios - 找不到SDWebImage框架iOS

ios - 如何从 UIView 子类调用 UIViewController?

ios - iOS 上的默认加载屏幕