Должен ли я освободить переменную экземпляра NSURLConnection? - PullRequest
0 голосов
/ 05 февраля 2012

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

вот какЯ создаю экземпляр NSURLConnection и как я его выпускаю:

NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
[connection release];

Я должен выпустить его, когда я закончу его использовать, я прав?или он будет выпущен за кулисами?

EDIT

Теперь я решил эту проблему, просто сделал экземпляр NSURLConnection в качестве ивара и выпустил егов dealloc вот код

заголовочный файл:

// ....
NSURLConnection *connection;

@property (nonatomic, retain) NSURLConnection *connection;

файл реализации:

// ...
NSURLRequest *request = [NSURLRequest requestWithURL:url];
self.connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
// ...

-(void)dealloc{ 
    [connection release];
    [super dealloc];
}

проблема в том, что я не освобождаю старое соединение перед назначением нового, это делается путем добавления себя перед ivar.

Ответы [ 2 ]

1 голос
/ 05 февраля 2012

Это будет немедленно освобождено и освобождено, так как alloc / init и release сбалансированы.

Итак, нет, это не то, что вы хотите.

пожалуйста, предоставьте больше кода относительно connection.Что вы делаете с ним.

Скорее всего, вы захотите, чтобы оно было записано в собственность и опубликовано в dealloc.

Пожалуйста, убедитесь, что вы понимаете Правила управления .Это жизненно важно.

0 голосов
/ 05 февраля 2012

Если вы (очевидно) не используете ARC, у вас есть два варианта:

a) удерживать ссылку на соединение и освобождать при необходимости

b) вы также можете освободить соединениев делегированных методах - анализатор выдаст вам предупреждение, если вы сделаете это

Первый вариант обычно проще поддерживать, особенно если вы используете более одного соединения в одном объекте.

Если этоновый проект, рассмотрите возможность использования ARC (как уже упоминал Ричард Дж. Росс III).

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