我有一个通用应用程序,每个设备(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
有没有办法做到这一点,还是有更好的方法来解决这个问题?
谢谢!
答案 0 :(得分:5)
没有办法完全按照你的要求去做。
这个额外的内存使用真的很重要吗?像这样的属性每个对象的实例只有4个字节。如果它只是一个控制器,你只有一个(或几个)实例,那么这甚至都不值得讨论。
如果你真的需要这样做,可以考虑制作一个抽象基类,然后为iPad和iPhone版本制作子类。在运行时,使用UI_USER_INTERFACE_IDIOM()
来决定实例化哪个类。
答案 1 :(得分:3)
这是解决此类问题的标准Objective C方法:
创建一个@property,如:
@property(nonatomic,retain)id< YourProtocolName> categoriesController。
将类似iPad或iPhone的控制器实例化为categoriesController。
这使您的架构更加优雅。 祝你有愉快的一天;)