1

我有一个通用应用程序,每个设备(iPad、iPhone)都有不同的属性集,如下所示:

//iPhone
@property (nonatomic, strong) CategoriesViewController *categoriesViewController;
//iPad
@property (nonatomic, strong) UIPopoverController *categoriesPopoverController;

但我不想浪费每个设备的内存合成属性。就像在我的情况下,当用户使用 iPhone 打开应用程序时,应该只创建 iPhone 特定的@properties。也适用于在 iPad 上运行的应用程序。

编译时是否有任何指令可以推迟此操作,例如:

#if UI_USER_INTERFACE_IDIOM() = iPhone
//create iPhone properties
#elseif UI_USER_INTERFACE_IDIOM() = iPad
//create iPad properties

有什么办法可以做到这一点,还是有更好的方法来处理这个?

谢谢!

4

2 回答 2

5

没有办法完全按照你的要求去做。

  1. 这种额外的内存使用真的很重要吗?像这样的属性每个对象实例只有 4 个字节。如果它在控制器之类的东西中,而您只有一个(或几个)实例,那么这甚至不值得谈论。

  2. 如果您确实需要这样做,请考虑创建一个抽象基类,然后为 iPad 和 iPhone 版本创建子类。在运行时,用于UI_USER_INTERFACE_IDIOM()决定要实例化哪个类。

于 2012-03-08T09:50:25.963 回答
3

这是解决此类问题的标准 Objective C 方法:

  1. 创建反映两个控制器的共同行为的@protocol。
  2. 两个控制器都应该遵守这个协议,即实现行为。
  3. 创建一个@property,例如:

    @property (nonatomic, retain) id < YourProtocolName > categoriesController。

  4. 将 iPad 或 iPhone 相关的控制器实例化为 categoriesController。

这使您的架构更加优雅。祝你今天过得愉快 ;)

于 2012-03-08T10:44:51.643 回答