Cocoa 将NSDictionary的本地声明传递给PerformSelect

Cocoa 将NSDictionary的本地声明传递给PerformSelect,cocoa,nsdictionary,selector,Cocoa,Nsdictionary,Selector,它是如何做到不需要在选择器调用方法中正确地放置数据对象的 带有警告的代码(数据的本地声明): 无警告代码: [self performSelector:@selector(downloadBinDataForTyp:data:) withObject:@"SiluetaImage" withObject:[NSDictionary dictionaryWithObjectsAndKeys:@"SiluetaImage", @"ACTION", si

它是如何做到不需要在选择器调用方法中正确地放置数据对象的

带有警告的代码(数据的本地声明):

无警告代码:

[self performSelector:@selector(downloadBinDataForTyp:data:) 
           withObject:@"SiluetaImage" 
           withObject:[NSDictionary dictionaryWithObjectsAndKeys:@"SiluetaImage", @"ACTION", silueta_id, @"siluetaid", siluetaTyp_id, @"siluetatypid", nil]];
选择器:

- (void)downloadBinDataForTyp:(NSString *)typ data:(NSDictionary*)data
{
    ASINetworkQueue *q = [self queue];
    NSString *sUrl = @"url_web_service";

    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:sUrl]];
    NSString *msgLength = [NSString stringWithFormat:@"%d", [[self getMsg] length]];

    [request setTimeOutSeconds:60];
    [request addRequestHeader: @"Content-Type" value:@"text/xml; charset=utf-8"];
    [request addRequestHeader: @"SOAPAction" value:_action];
    [request addRequestHeader: @"Content-Length" value:msgLength];
    [request setRequestMethod: @"POST"];
    request.userInfo = data;

    [request appendPostData:[self getMsg]];
    [request setDelegate:self];

    [q addOperation:request];
    [q go];

}

在这里,您传递的是
数据
,其范围仅限于方法。在方法之外,它不能被访问,因为它正在获得
release
d.

是的,我得到了它,但是没有办法不被释放吗?因此,该数据将继续进行选择器调用。将其设置为属性或ivar。如果是属性或ivar,它将在我不希望的时间更改。谁将更改?它将如何改变?你是编码员,你知道什么时候改变它。不是吗?我将在创建另一个httpRequest以排队时更改它。嗯,当我使用它来设置httpRequest.userInfo并放入队列时,它不会为该请求更改吗?当我使用相同的属性和不同的值向队列创建另一个请求时,它是否会保存请求的值?
- (void)downloadBinDataForTyp:(NSString *)typ data:(NSDictionary*)data
{
    ASINetworkQueue *q = [self queue];
    NSString *sUrl = @"url_web_service";

    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:sUrl]];
    NSString *msgLength = [NSString stringWithFormat:@"%d", [[self getMsg] length]];

    [request setTimeOutSeconds:60];
    [request addRequestHeader: @"Content-Type" value:@"text/xml; charset=utf-8"];
    [request addRequestHeader: @"SOAPAction" value:_action];
    [request addRequestHeader: @"Content-Length" value:msgLength];
    [request setRequestMethod: @"POST"];
    request.userInfo = data;

    [request appendPostData:[self getMsg]];
    [request setDelegate:self];

    [q addOperation:request];
    [q go];

}
NSDictionary *data = [NSDictionary dictionaryWithObjectsAndKeys:@"SiluetaImage", @"ACTION", silueta_id, @"siluetaid", siluetaTyp_id, @"siluetatypid", nil];
[self performSelector:@selector(downloadBinDataForTyp:data:) 
           withObject:@"SiluetaImage" 
           withObject:data];