Objective-C: определить, нет ли у объекта больше владельцев - PullRequest
0 голосов
/ 18 апреля 2011

Я использую NSMutableArray в качестве «оконного менеджера» для хранения всех моих объектов NSView, я отправляю его как

[windowManager addObject:self];

сразу после ViewDidLoad каждого NSView;

вопрос в том,как я могу обнаружить в моем "windowManager" NSMutableArray, если он хранит объекты, которые были вызваны к выпуску (а windowManager - единственный, содержащий их экземпляр)?

После того, как я вызываю выпуск для одного из этих NSView иповерните

SomeNSViewPointer = nil;

, мне также нужен WindowManager, чтобы проверить выше.

Ответы [ 4 ]

2 голосов
/ 18 апреля 2011

Когда вы делаете это:

[someNSViewPointer release];
SomeNSViewPointer = nil;

Сделайте это вместо:

[someNSViewPointer release];
[windowManager removeObject: someNSViewPointer];
SomeNSViewPointer = nil;

Мне бы хотелось задать вопрос, почему вы храните две ссылки на ваше мнение. Я думаю, что ваш дизайн нуждается в пересмотре.

0 голосов
/ 18 апреля 2011

Когда вы добавляете что-либо в свой NSMutableArray через 'addObject', этот NSMutableArray сохраняет его. Вам нужно будет удалить этот объект из NSMutableArray, чтобы освободить его, если это то, что вам нужно.

[yourNSMutableArray removeObjectIdenticalTo:yourNSView];
0 голосов
/ 18 апреля 2011

Вы можете отправить представление, которое вы проверяете, сообщение -(int)retainCount и проверить, является ли оно одним (то есть, единственным сохранить от добавления его в массив)?Этот вопрос поднимает красный флажок, что вы делаете что-то, что может считаться плохим дизайном, почему вы это делаете?

0 голосов
/ 18 апреля 2011

Возможно, попробуйте, если ([myView retainCount] == ​​1), то он сохраняется только в windowManager.

[EDIT] Прочтите о retainCount в ссылке на NSObject.Как предполагает JeremyP, не стоит использовать это в своем коде, но лучше подумать о дизайне кода.

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intfm/NSObject/retainCount

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