Освобождение объектов, когда делаю и когда у меня тоже нет - PullRequest
0 голосов
/ 08 июля 2010

Вот некоторый код, который у меня есть в приложении, который я не выпускал. Когда я пытаюсь освободиться, я получаю сигнал от Программы: «EXC_BAD_ACCESS» исключение и приложение вылетает. Если я не пытаюсь выпустить его, приложение работает нормально. Нужно ли вызывать сообщение об освобождении этих объектов? Есть идеи, что здесь может происходить?

        NSString *sA = legA.text;
        NSArray *firstLeg = [sA componentsSeparatedByString:@","]; 


[sA release]; //works ok
[firstLeg release]; //sends the bad access exception and crashes the app

Ответы [ 5 ]

0 голосов
/ 08 июля 2010

Несколько правильных ответов до сих пор, но никто еще не опубликовал Правила управления памятью какао , которые должны быть обязательными при ответе на вопрос «У меня есть это» ..

Редактировать: долженпечатать быстрее ...

0 голосов
/ 08 июля 2010

Бегите, не ходите, к разделу «Владение объектами» Руководства по программированию управления памятью для какао и читайте правила, когда вы «владеете» объектом. Вы отпускаете только свои объекты, поэтому в этом случае вы не хотите их отпускать.

0 голосов
/ 08 июля 2010

Я не силен в цели c, но разве не должно быть [[NSArray alloc] init] вещь где-нибудь?Или компонентыSeperatedBySTring заменяют его?

0 голосов
/ 08 июля 2010

Нет, вы можете отправлять релиз только тем объектам, которые у вас есть: те, которые вы получаете от alloc / init, оставьте или скопируйте.

0 голосов
/ 08 июля 2010

Они оба не обязательно должны быть -release d.

Я предлагаю вам прочитать Правила управления памятью .Вам необходимо -release объект тогда и только тогда, когда текущая область является владельцем этого объекта.Вы становитесь владельцем только , когда объект принимается как

  • [[Foo alloc...] init...]
  • [foo new...]
  • [foo copy...] или [foo mutableCopy...]
  • [foo retain]

во всех других случаях вы никогда не должны -release это.Поскольку .text и -componentsSeparatedByString: не являются одним из этих методов, нет необходимости в -release sA и firstLeg.

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