iphone基於網路的客戶端開發技巧 後台上傳

2021-06-04 20:10:32 字數 2107 閱讀 5285

from: 

這裡說的後台上傳當然不是真的後台上傳,只是在開啟程式的情況下不影響操作的上傳。

基本的思想就是開啟乙個執行緒,不斷的處理上傳操作。這裡用佇列比較方便一些。

主要做以下幾步:

第一步:實現乙個自定義類,繼承nsobject

@inte***ce minroadoperation : nsobject

- (void)addoperation:(nsdictionary *)_dic;

- (void)restartoperation:(nsdictionary *)_dic;

@property (retain,nonatomic) nsoperationqueue *operationqueue;

@end

@implementation minroadoperation

@synthesize operationqueue;

- (id)init

return self;

}

- (void)addoperation:(nsdictionary *)_dic

else

//新增到佇列

nsinvocationoperation* theop = [[nsinvocationoperation alloc] initwithtarget:self

selector:@selector(mytaskmethod:) object:_dic];

[self.operationqueue addoperation:theop];

[theop release];

//更新ui}

- (void)restartoperation:(nsdictionary *)_dic

nsmutabledictionary *dic = [nsmutabledictionary dictionarywithdictionary:[arr objectatindex:i]];

[dic setvalue:[nsnumber numberwithint:0] forkey:@"state"];//0 等待上傳 1 上傳中 2 失敗

[arr replaceobjectatindex:i withobject:dic];

[userdefault setvalue:arr forkey:@"upload"];

[userdefault synchronize];

nsinvocationoperation* theop = [[nsinvocationoperation alloc] initwithtarget:self

selector:@selector(mytaskmethod:) object:dic];

[self.operationqueue addoperation:theop];

[theop release];

//更新ui}

- (void)mytaskmethod:(id)_obj

- (void)taskmethoddidfailed:(id)_obj

[userdefault setobject:arr forkey:@"upload"];

[arr release];

[userdefault synchronize];

//更新ui}

- (void)taskmethoddidfinish:(id)_obj

[userdefault setobject:arr forkey:@"upload"];

[arr release];

[userdefault synchronize];

//更新ui}

- (void)dealloc

@end

第三步:在程式重新開啟的時候啟動佇列。同時有一點不確認,就是從後台返回貌似佇列會繼續進行,也就是說進入後台的時候佇列處在等待狀態。

需要注意的幾點:

1. nsinvocationoperation的cancel方法只是設定乙個標識,在進入佇列的時候判斷是否為true,從而判斷是否進行。如果想取消nsinvocationoperation,可以嘗試繼承它。

2.避免無限重試。

shell網路客戶端

需要把線上的access日誌傳送到另乙個程式接收 開始想著用python實現,雖然python也有實現類似tail f的方式,但太麻煩,而且效率也有折扣 偶然發現了shell可以實現網路client,並且只用幾行 就可以實現 先上 trap exec 8 exec 8 0 file data ngi...

基於UDP的服務端 客戶端

udp套接字的特點 udp提供的是不可靠的傳輸服務。如果只考慮可靠性tcp要優於udp,但是udp的結構要比tcp更簡潔。udp不會傳送ack的應答資訊,也不會像seq那樣給資料分配序號。因此,udp效能有時比tcp高出很多。程式設計實現簡單。可靠性雖然不及tcp,但也不會像想象中那麼頻繁的資料損毀...

iPhone客戶端開發筆記(八)

客戶端穩定性和提公升使用者體驗。2,嘗試在後台接收報警資訊的嘗試 後台執行。這是官方文件中關於後台和多工的詳細描述 3,嘗試使用push notification接收報警資訊 這是對remote push notification機制的概述 要實現push notification,需要以下三部分知...