第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

管理多個(gè)異步NSURLConnection連接

管理多個(gè)異步NSURLConnection連接

MMTTMM 2019-09-18 19:26:47
我班上有很多重復(fù)的代碼,如下所示:NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request                                                              delegate:self];異步請(qǐng)求的問(wèn)題是當(dāng)你有各種請(qǐng)求消失,并且你有一個(gè)委托指定將它們?nèi)恳暈橐粋€(gè)實(shí)體時(shí),許多分支和丑陋的代碼開(kāi)始形成:我們回來(lái)了什么樣的數(shù)據(jù)?如果它包含這個(gè),那就做,否則做其他。我認(rèn)為能夠標(biāo)記這些異步請(qǐng)求會(huì)很有用,就像你能夠使用ID標(biāo)記視圖一樣。我很好奇什么策略對(duì)于管理處理多個(gè)異步請(qǐng)求的類最有效。
查看完整描述

3 回答

?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊

我跟蹤由與之關(guān)聯(lián)的NSURLConnection鍵入的CFMutableDictionaryRef中的響應(yīng)。即:


connectionToInfoMapping =

    CFDictionaryCreateMutable(

        kCFAllocatorDefault,

        0,

        &kCFTypeDictionaryKeyCallBacks,

        &kCFTypeDictionaryValueCallBacks);

使用它而不是NSMutableDictionary可能看起來(lái)很奇怪,但我這樣做是因?yàn)檫@個(gè)CFDictionary只保留其鍵(NSURLConnection),而NSDictionary復(fù)制其鍵(并且NSURLConnection不支持復(fù)制)。


一旦完成:


CFDictionaryAddValue(

    connectionToInfoMapping,

    connection,

    [NSMutableDictionary

        dictionaryWithObject:[NSMutableData data]

        forKey:@"receivedData"]);

現(xiàn)在我有一個(gè)“info”字典,用于每個(gè)連接,我可以用它來(lái)跟蹤有關(guān)連接的信息,“info”字典已經(jīng)包含一個(gè)可變數(shù)據(jù)對(duì)象,我可以用它來(lái)存儲(chǔ)答復(fù)數(shù)據(jù)。


- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

    NSMutableDictionary *connectionInfo =

        CFDictionaryGetValue(connectionToInfoMapping, connection);

    [[connectionInfo objectForKey:@"receivedData"] appendData:data];

}


查看完整回答
反對(duì) 回復(fù) 2019-09-18
?
嚕嚕噠

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊

我有一個(gè)項(xiàng)目,我有兩個(gè)不同的NSURLConnections,并希望使用相同的委托。我所做的是在我的類中創(chuàng)建兩個(gè)屬性,每個(gè)連接一個(gè)。然后在委托方法中,我檢查它是否是哪個(gè)連接



- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

    if (connection == self.savingConnection) {

        [self.savingReturnedData appendData:data];

    }

    else {

        [self.sharingReturnedData appendData:data];

    }

}

這也允許我在需要時(shí)按名稱取消特定連接。


查看完整回答
反對(duì) 回復(fù) 2019-09-18
?
侃侃無(wú)極

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊

對(duì)NSURLConnection進(jìn)行子類化以保存數(shù)據(jù)是干凈的,代碼少于其他一些答案,更靈活,并且需要較少考慮參考管理。


// DataURLConnection.h

#import <Foundation/Foundation.h>

@interface DataURLConnection : NSURLConnection

@property(nonatomic, strong) NSMutableData *data;

@end


// DataURLConnection.m

#import "DataURLConnection.h"

@implementation DataURLConnection

@synthesize data;

@end

像使用NSURLConnection一樣使用它并在其data屬性中累積數(shù)據(jù):


- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {

    ((DataURLConnection *)connection).data = [[NSMutableData alloc] init];

}


- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

    [((DataURLConnection *)connection).data appendData:data];

}

而已。


如果你想更進(jìn)一步,可以添加一個(gè)塊作為回調(diào),只需幾行代碼:


// Add to DataURLConnection.h/.m

@property(nonatomic, copy) void (^onComplete)();

像這樣設(shè)置:


DataURLConnection *con = [[DataURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];

con.onComplete = ^{

    [self myMethod:con];

};

[con start];

并在加載完成時(shí)調(diào)用它,如下所示:


- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

    ((DataURLConnection *)connection).onComplete();

}

您可以擴(kuò)展塊以接受參數(shù),或者只將DataURLConnection作為參數(shù)傳遞給no-args塊中需要它的方法


查看完整回答
反對(duì) 回復(fù) 2019-09-18
  • 3 回答
  • 0 關(guān)注
  • 487 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)