NSURLConnection上的“NSMutableData数据保留” - 这有多么平静?

时间:2011-07-27 08:36:02

标签: loops nsurlconnection retain

在很多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:的ivar

任何人都可以为我清除这个吗?哪个应该使用,有什么区别?

1 个答案:

答案 0 :(得分:0)

[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关键字指定的方法。