Стоимость приведения NSObject, в частности приведения к UIView в iOS с использованием #define - PullRequest
0 голосов
/ 02 января 2012

Я склонен делать все с Interface Builder и IBOutlet, поэтому, когда я хочу изменить пользовательский интерфейс, я использую для объявления переменной в UIViewController, например:

@property(nonatomic,retain) IBOutlet MyView *myView;

подключите его через Interface Builder и вызовите мой код с помощью розетки, после чего я смогу получить доступ ко всем другим розеткам в myView:

UILabel *label = myView.theLabel;

Учитывая, что MyView очень часто является моим основным видом, я также могу сделать:

UILabel *label = (MyView*)self.view.theLabel;

синтаксис довольно длинный, но это позволяет мне объявлять меньшую переменную в файле .h и (на мой взгляд) содержать код в чистоте, например, с макросом это может стать:

#define MV (MyView*)self.view

UILabel *label = MV.theLabel;

, который я нашел гораздо приятнее читать и поддерживать. Дело в том, что я бы всегда делал кастинг, используя iOS 5, какова стоимость с точки зрения производительности? Учитывая, что UIKit уже является слоем поверх чего-то другого, является ли приведение объектов UIView несколько другим или более дорогим? Компилятор выполняет какие-то оптимизации, особенно с новым дуговым компилятором?

спасибо

1 Ответ

0 голосов
/ 02 января 2012

Приведение происходит во время компиляции, и поэтому абсолютно не требует затрат времени выполнения .

Боковая панель: Этот способ использования определений все еще кажется мне немного сомнительным, но эй, если он работает для вас ...

Редактировать: Проблема, которую вы описываете, является результатом объединения целей классов в вашем коде: MyView не должен иметь никаких выходов, о которых можно было бы говорить; Отслеживание всего этого джаза - работа контроллера представления.

Другими словами; вы, вероятно, не хотите self.view.label; а точнее self.relevantNameForTheLabel.

...