Создавайте различные свойства @ для iPad и iPhone. - PullRequest
1 голос
/ 08 марта 2012

У меня есть универсальное приложение, и для каждого устройства (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

Есть ли способ сделать это или есть лучший способ справиться с этим?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 08 марта 2012

Нет способа сделать именно то, что вы просите.

  1. Действительно ли это дополнительное использование памяти значимо?Такое свойство составляет всего 4 байта на экземпляр вашего объекта.Если это что-то вроде контроллера, где у вас есть только один (или несколько) экземпляров, то об этом даже не стоит говорить.

  2. Если вам действительно нужно это сделать, подумайтесоздание абстрактного базового класса, а затем создание подклассов для версий для iPad и iPhone.Во время выполнения используйте UI_USER_INTERFACE_IDIOM(), чтобы решить, какой класс создать.

3 голосов
/ 08 марта 2012

Это стандартный Objective C способ решения таких вопросов:

  1. Создать @protocol, отражающий общее поведение обоих контроллеров.
  2. Оба контроллера должны соответствовать этому протоколу, т.е. реализовывать поведение.
  3. Создать ОДИН @property вроде:

    @ property (nonatomic, retain) id CategoriesController.

  4. Создание контроллера, связанного с iPad или iPhone, по категориям Controller.

Это сделает вашу архитектуру более элегантной. Хорошего дня;)

...