Какао Objective-C добавление подпредставлений - PullRequest
1 голос
/ 02 февраля 2011

У меня есть игровое приложение (какао, а не касание какао), в котором я пытаюсь добавить элементы карты. Окно моего приложения называется 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, поэтому я не уверен, как бы я разместил его там.

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

Спасибо

1 Ответ

1 голос
/ 02 февраля 2011

Во-первых, если вы объявляете 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], его счетчик ссылок (за исключением некоторых других ссылок) упадет до нуля и, в конечном счете, будет освобожден.

...