[英]How NSOperation handle network connection loss while downloading huge data?
[英]How to handle exit() in NSOperation
我有一個C源代碼,希望在我的iPhone App中使用該應用程序。 我認為最好的方法是在NSOperation
子類中調用該C應用程序的主要方法。
除C應用程序出現問題並調用exit()
/ abort()
導致我的整個iPHone App崩潰的情況外,這種方法都可以正常工作。
C代碼很長,我不想經歷它或以任何方式打擾它。 我想知道是否可以繞開NSOperation
中的那些exit()
/ abort()
調用,以便它僅退出線程,而不是整個應用程序。
如何使用-Dexit = my_exit -Dabort = my_abort選項進行編譯並實現my_exit和my_abort如下所示?
void my_exit(int status)
{
if (!/* check thread ID or so forth, and check during calling the NSOperation */) {
exit(status);
}
}
在您自己編譯C代碼時,您可以添加自己的exit()
和abort()
函數,然后C代碼將調用這些函數,而不是調用庫中的那些函數。 定義它們以將適當的狀態傳遞給您的Obj-C代碼並關閉線程。
為了實現真正的隔離,您當然想使用NSTask
...
我認為在abort()
之后沒有任何可行的方法可以進行操作,而exit()
可能也是如此。 這兩個調用實際上都終止了進程,這意味着原始程序員可能沒有費心清理分配的資源和文件描述符等。因此,即使終止線程而不是進程,您的應用程序也幾乎肯定會像篩子一樣泄漏每當調用覆蓋的exit()/ abort()時。
更嚴重的是,如果程序調用了abort(),則它可能已檢測到其運行時間或程序員錯誤無法恢復的問題。 例如,緩沖區溢出可能破壞了堆。 因此,可能無法從這種情況中恢復過來。
恐怕您將不得不審核每次exit()
和abort()
發生,以查看僅終止線程是否更安全。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.