«Данные NSMutableData сохраняются» на NSURLConnection - насколько спокойно это работает? - PullRequest
0 голосов
/ 27 июля 2011

На многих NSURLConnection примерах я вижу следующие строки:

NSURLConnection *theConnection = [[NSURLConnection alloc]initWithRequest:theRequest delegate:self];
if(theConnection)
{
    webData = [[NSMutableData data]retain];
}
else
    ...

Интересно - что это должно делать?и почему это работает?Я думал, что data - это метод доступа, и поскольку вы не вызываете его для инстанцированного объекта, он вернет nil, и, сохраняя его, вы на самом деле ничего не делаете.

Это мой способвидно, чтобы получить данные о таких соединениях:

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:url] delegate:self startImmediately:YES];
if( connection )
{
    while (!finished) {
        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
    }
}

finished - это ивар, для которого установлено значение YES на connectionDidFinishLoading:

Может кто-нибудь прояснить это для меня?Что следует использовать и в чем разница?

1 Ответ

0 голосов
/ 27 июля 2011

[NSMutableData data] не метод доступа, а так называемый метод класса . Вы, наверное, знаете [NSMutableData alloc], это тоже метод класса и означает, что он привязан к классу, но не к экземпляру. Типичным способом обозначить, что метод является методом класса, является добавление к нему префикса с плюсом: +[NSMutableData data].

В этом случае метод наследуется от класса NSData (но возвращает экземпляр NSMutableData, поскольку вы вызываете его для этого класса).

Реализация может выглядеть следующим образом:

@interface NSMutableData
+ (id)data
{
    return [[[self alloc] init] autorelease];
}
@end

Обратите внимание, что self в данном случае является классом NSMutableData.

В других языках, таких как C ++, C # и Java (AFAIK), это будут методы, которые вы указываете с помощью ключевого слова static.

...