Поэтому я объявил это в разделе @interface
справа, который просто резервирует место и метку для доступа к ивару с типом + name
а затем @property (nonatomic, retain) UIView * calendarView.
право, которое объявляет методы доступа (setter + getter) и операцию при синтезе
В @implementation у меня есть @synthesise calendarView.
, который определяет (реализует) методы доступа, объявленные объявлением свойства.
Теперь я хотел бы определить кадр этого представления и закодировать следующее:
...Но теперь мне интересно, делаю ли я что-то здесь серьезно, так как calendarView уже был сохранен и синтезирован.Конечно, UIView alloc избыточен или даже обязан вызывать сбой приложения, так как у меня проблемы с памятью, верно?
с одной стороны, управление памятью отключено:
CGRect calendarFrame = CGRectMake(170, 8, 200, 50);
UIView * view = [[UIView alloc] initWithFrame:calendarFrame];
self.calendarView = view; // use the setter, unless in init... or dealloc
[view release], view = 0;
два: у вас обычно не будет большой пользы при создании UIView.как правило, вы создаете его подкласс.
three (чтобы ответить на ваш вопрос): в этом нет ничего плохого.переменная будет nil
, пока она не будет установлена.поле не является инициализированным по умолчанию для объявленного типа - ну, это так, но тип на самом деле является указателем, поэтому в результате он инициализируется нулем.Вы можете создать представление или передать его из другого места.до этой точки представление будет nil / NULL / 0.
Так что я хотел бы кодировать это вместо двух предыдущих строк, но это только привело к тому, что calendarView вообще не отображается:
[calendarView setFrame: CGRectMake (170, 8, 200, 50)];Итак, мой вопрос: действительно ли мне нужно распределить представление, прежде чем я смогу его использовать?Или есть еще одно решение?
, возвращаясь к пункту №2 более подробно: в большинстве случаев вы захотите создать подкласс.UIView / NSView не рисует по умолчанию, но его можно использовать как контейнер вида.поэтому, возможно, вы захотите начать с некоторых существующих подклассов, чтобы ознакомиться с системными представлениями.
, как только у вас появится дескриптор, попробуйте реализовать свои собственные подклассы и переопределить drawRect:
.
многим новичкам нравится использовать Interface Builder (теперь интегрированный в Xc4) - редактор представлений WYSIWYG.