0

我并不真正理解弱指针和强指针之间的区别。到目前为止,它不会造成任何大问题,我正在按照文档中的示例进行操作,制作 NSURLRequest 并在 NSURLConnection 中使用它来接收数据。

代码是这样的:

    //create the request with url
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://localhost:3000/students.json"]];

    //create the with the request
    NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];


    if (connection) {
        //create NSData instance to hold data if connection is successfull
        self.receivedData = [[NSMutableData alloc]init];
//        NSLog(@"%@",@"Connection successfully");
    }
    else{
        NSLog(@"%@",@"Connection failed");
    }

所以我将数据附加到receivedData委托方法的主体中。

@property (strong,nonatomic) NSMutableData *receivedData;

//delegate method
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    [self.receivedData appendData:data];
    NSLog(@"%@",@"Receiving Data");
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
    NSLog(@"Succeeded! Received %d bytes of data",[self.receivedData length]);
}

我上面发布的代码正在运行:) 因为我刚刚修复了它。

我的问题是- 指针的类型是原始的weak[self.receivedData length]在将指针类型从weakto更改为之前,我总是会得到 0 个字节的数据,strong我不明白为什么它不能保存数据。

4

2 回答 2

2

弱引用不会保留其内容。您告诉receivedData变量查看您创建的可变数据对象,但不要保留它。因此,当该if块完成时,数据的范围结束并且 ARC 将其释放;没有其他东西可以控制它,所以它被释放,receivedData 被设置为 nil,因为它不再有任何指向。[self.receivedData length]返回 0(技术上为零),因为self.receivedData它是零。通过声明 receivedData 强,你告诉它持有它指向的对象,确保它一直存在,直到你完成它。

于 2012-10-08T04:43:34.447 回答
2

尝试使用它来获取数据

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://localhost:3000/students.json"]]];

NSURLResponse *response;
NSError *error;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *strResponse = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
//    NSLog(@"%@",strResponse);

SBJSON *sbJason = [[SBJSON alloc] init];
NSMutableDictionary *getNameList = [sbJason objectWithString:strResponse]; 
于 2012-10-08T04:51:39.260 回答