XCode iPhone автоматическое свойство, синтезировать и делок - PullRequest
6 голосов
/ 22 марта 2011

Я разрабатываю для iPhone последние 1-2 месяца и все время принимаю IBOutlet. Для объявления любого свойства я использую следующий метод:

В .h файлах:

@interface ....
{
     controlType varName;
}

@property() IBOutlet controlType varName;

В .m файлах:

вверху -

@synthesize varName;</p>

<p>in delloc method - [varName release];

Хотя этот метод хорош, но он не очень хорош, когда требуется несколько минут только для объявления свойства.

Существует ли какой-либо автоматический процесс объявления свойств, IBOutlets, IBActions или базовых переменных данных.

Я надеюсь, что для этого сценария должны быть некоторые автоматические методы, поскольку это очень простой процесс.

Спасибо всем.

Ответы [ 5 ]

8 голосов
/ 22 марта 2011

Еще один момент, о котором мало кто знает, это то, что вы можете перетащить из Интерфейсного Разработчика в свой заголовочный файл для создания IBActions или IBOutlets.

ПРИМЕЧАНИЕ: Откройте Ассистентский редактор с фокусом на XIB внутри IB.

Если вы создаете свой IBOutlets таким образом, XCode автоматически добавляет свойство, синтезирует его, устанавливает его равным nil в viewDidUnload и освобождает его в dealloc.

Вы просто перетаскиваете из объекта IB в файл заголовка так же, как при создании соединений между объектами вида и их владельцами (скриншот ниже). enter image description here

4 голосов
/ 22 марта 2011

На самом деле да!

Вам больше не нужно объявлять фактический iVar.

Короче, просто пропустите эту часть: controlType varName;

На данный момент вам все еще необходимо явно "синтезировать".

(Насколько я понимаю, они могли бы автоматизировать это в будущем. Но сейчас вам нужно "синтезировать", чтобы создать сеттер и геттер.)

Вам все еще нужно освободить память - на самом деле нет никакого способа, которым можно было бы автоматизировать, поскольку обработка памяти - это «настоящее программирование для человека».

При любом новом чтении друзей не забывайте о себе. часть при использовании имущества.

Плюс отметим, что в XCode4 даже есть новая автоматическая штуковина. Просто перетащите из конструктора интерфейса в ваш файл .h, и он все сделает за вас - попробуйте!


В ответ на ваш дополнительный вопрос: IBOutlet НЕ ОСОБЕННО НЕ ДОЛЖЕН БЫТЬ - собственность - вы можете просто использовать обычный дешевый iVar. С другой стороны, если вы хотите, вы можете использовать недвижимость. Более того: вы даже можете использовать новую уловку (2011), не беспокоясь об объявлении ivar, просто используйте объявление свойства и добавьте туда IBOutlet!

2 голосов
/ 22 марта 2011

Существует потрясающий инструмент, который ускоряет весь процесс: accessorizer .

Вы пишете controlType varName; выберите его и нажмите несколько кнопок, и аксессорайзер создаст для вас свойство, init, dealloc, viewDidUnload и многое другое. Вам просто нужно вставить код в ваш проект.

Попробуйте, демо доступно.

0 голосов
/ 22 марта 2011

Вот скрипт xcode для автоматизации скуки объявления свойств.

0 голосов
/ 22 марта 2011

Вы можете избавить себя от необходимости освобождать объект, изменив объявление свойства.Если вы используете:

@property (assign) IBOutlet controlType varName;

retain не будет вызываться по вашему мнению, так что вам не придется выпустить его позже.Обычно это безопасно, так как представления сохраняются при добавлении к родителю.Если по какой-то причине вы удаляете представления из родительского элемента, вам придется их сохранить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...