Какао Objective-C добавление подвидов

У меня есть игровое приложение (какао, а не какао), в которое я пытаюсь добавить элементы карты. Окно моего приложения называется mainWin. У меня есть подвид mainWin с именем viewGameMap, который я добавил в IB. У меня есть класс room.h / room.m, который в основном принимает размеры, созданные в приложении, для ширины и высоты комнаты.

Я могу сделать это:

room* thisRoom = [[room alloc] initWithFrame: NSMakeRect(441.0-roomWidth,520.0-roomLength, roomWidth * 10, roomLength * 10)];
[[mainWin contentView] addSubview:thisRoom];

Но я действительно хочу добавить это подвид в viewGameMap, могу ли я подпредставить подвид? В IB я заметил, что в подпредставлении нет contentView, поэтому я не уверен, как бы его там разместить.

Что касается связанного вопроса, эти виды комнат не будут постоянными, так как мне их уничтожить, когда я закончу с ними.

Спасибо


person PruitIgoe    schedule 02.02.2011    source источник


Ответы (1)


Во-первых, если вы объявляете viewGameMap в своем .h файле, например (с помощью директивы @property):

@property (nonatomic, retain) IBOutlet UIView   *viewGameMap;

или даже просто в фактическом объявлении, например:

IBOutlet UIView *viewGameMap;

тогда вы сможете привязать viewGameMap к соответствующему UIView в IB. Это даст вам прямой доступ к viewGameMap.

Во-вторых, поскольку вы используете alloc для создания экземпляра объекта Room (например, класс Room должен быть написан с заглавной буквы в соответствии с соглашением), вы несете ответственность за него (он принадлежит вам). Но когда вы вызываете -addSubview :, тогда [mainWin contentView] также владеет thisRoom. Итак, вы можете сделать это:

room* thisRoom = [[room alloc] initWithFrame: NSMakeRect(441.0-roomWidth,520.0-roomLength, roomWidth * 10, roomLength * 10)];
[viewGameMap addSubview:thisRoom];
[thisRoom release];

Позже, когда thisRoom удаляется из [mainWin contentView], его счетчик ссылок (за исключением некоторых других ссылок) упадет до нуля, и в конечном итоге он будет освобожден.

person westsider    schedule 02.02.2011