Допустимо ли в target-c проходить графы объектов таким образом? - PullRequest
1 голос
/ 28 августа 2011

Представьте, что у вас есть рекурсивная структура объекта, подобная этой:

MyComposite *c = [MyComposite compositeWithName:@"Jack"];

// add/append some children ...    

do
{
  // do something with the current composite
  ...
  // continue traversal
  c = [c child];
}while ( c );

Является ли этот обход действительным с точки зрения управления памятью?

Ответы [ 2 ]

3 голосов
/ 28 августа 2011

Теоретически, в этом нет ничего плохого. Тем не менее:

  1. Обычно в Objective-C вы просто используете NSArray или NSSet, и вы не пишете свой собственный класс связанного списка. Обратите внимание, что NSArray на самом деле не является массивом в стандартном смысле. Например, вставка объектов в середине не очень медленная.
  2. Как говорит WTP, вы не называете получателей get.... Если имя свойства foo, метод получения называется просто foo, а метод установки - setFoo:. Это в значительной степени соглашение, но некоторая часть системы Какао зависит от этого соглашения. Итак, переименуйте ваш метод немедленно, когда вы закончите читать это предложение.
2 голосов
/ 29 августа 2011

Да, это нормально.c является локальной переменной, указывающей на экземпляр MyComposite.Переназначение другого значения указателя MyComposite на c не влияет на исходный экземпляр MyComposite.

Что касается ответа Yuji, вам не следует использовать NSArray или NSSet для хранения рекурсивной структуры данных, с вашей структурой данных все в порядке,NSArray и NSSet предназначены для плоских наборов данных и не могут указывать какие-либо отношения между их членами, кроме принудительного линейного упорядочения в случае NSArray.

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