2013-07-03 12 views
1

我有一個很奇怪的問題,我的代碼運行,因爲我覺得如果我點擊在Xcode塊的塊不叫特設檔案,但運行正常和Xcode

「運行」按鈕,但是經過我存檔它,並將其安裝在相同的iPhone(4s,6.1.3)

該塊沒有運行,因爲我認爲。

我正在使用舊的ASIHttpRequest API。

下面是代碼在我的項目

1.A單例類處理API調用

APICall.h 

    typedef void (^CompleteHandler)(NSMutableArray *); 

    - (void)listAllHistoryData:(CompleteHandler)theBlock; 

    APICall.m 

    - (void)listAllHistoryData:(CompleteHandler)theBlock{ 
    __weak ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:eWhereListAllDataURL]; 
    request.delegate = self; 
    [request setRequestMethod:@"GET"]; 
    [request setCompletionBlock:^{ 
     NSString *response = [request responseString]; 
     NSData *data = [response dataUsingEncoding: NSUTF8StringEncoding]; 
     _sessionList = [[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil] objectForKey:@"all_sessions"]; 
      theBlock(_sessionList); 
    }]; 
    [request startAsynchronous]; 
} 

2.View控制器

- (void)viewDidLoad{ 
    [[APICall shareInstance] listAllHistoryData:^ (NSMutableArray *list) { 
      dataList = [NSMutableArray arrayWithArray:list]; 
      } 
       [theTableView reloadData]; 
     }]; 

就像我發佈這些代碼.. 。

我在存檔我的項目後看不到有什麼不同。

反正感謝您的回答或評論

韋伯

+0

您是否嘗試過調試/ Xcode中運行的代碼,但在設備上,而不是模擬器?取而代之的是 –

+0

,謝謝 –

回答

2

你的局部變量__weak

ARC允許核彈這個參考分鐘requestWithURL:...回報(回報遞減保留計數,__weak不會增加它)。因此,您的請求變量將被釋放並設置爲零,然後您可以調用startAsynchronous。

爲什麼你讓該局部變量__weak?刪除代碼時,不會在代碼中涉及不可分割的保留週期。我相信完成塊在被調用後會被釋放(並釋放/銷燬)。

如果情況並非如此,並且您在這裏有一個真正的泄漏,那麼您將不得不爲ASIFormDataRequest創建另一個非弱引用,以便在您的方法期間它不會被吹走。

AdHoc版本無法正常工作的原因是因爲AdHoc是使用發佈目標構建的,因此AdHoc會優化(我相信會導致LLVM以更嚴格的方式通過ARC來終止您的對象)。

0

__weak請求在Xcode的發佈模式下發布。 您可以在目標 - 生成設置 - 調試&版本中的優化級別中找到這些差異。

設置如下班在構建階段追加「-O0」 - 編譯源代碼 ASIFormDataRequest.m ASIHTTPRequest.m 爲我工作。

希望它可以幫助

相關問題