为iPad和iPhone运行时创建不同的@properties

Bor*_*zin 1 iphone runtime properties ios ios-universal-app

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

//iPhone
@property (nonatomic, strong) CategoriesViewController *categoriesViewController;
//iPad
@property (nonatomic, strong) UIPopoverController *categoriesPopoverController;
Run Code Online (Sandbox Code Playgroud)

但我不想浪费每个设备的内存合成属性.就像我的情况一样,当用户使用iPhone打开应用程序时,只应创建特定于iPhone的@properties.对于在iPad上运行的应用程序,反之亦然.

在编译时是否有任何指令推迟这个,类似的东西:

#if UI_USER_INTERFACE_IDIOM() = iPhone
//create iPhone properties
#elseif UI_USER_INTERFACE_IDIOM() = iPad
//create iPad properties
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Kur*_*vis 5

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

  1. 这个额外的内存使用真的很重要吗?像这样的属性每个对象的实例只有4个字节.如果它只是一个控制器,你只有一个(或几个)实例,那么这甚至都不值得讨论.

  2. 如果你真的需要这样做,可以考虑制作一个抽象基类,然后为iPad和iPhone版本制作子类.在运行时,用于UI_USER_INTERFACE_IDIOM()决定实例化哪个类.