在網上搜索了一下如何在IOS上面實現Daemon Process,只有chrisalvares的博客中有過詳細的描述,但是其博客中描述的較為復雜,
參考stackoverflow中的一個問答:
http://stackoverflow.com/questions/13345686/ios-daemon-app-will-not-start-jailbreak-how-to-debug
綜合上面的實現方案,下面給出本人的實現:
IOS Daemon的實現分為兩個部分,一個是守護程序的可執行文件,一個是描述可執行文件的plist。
可執行文件可以使用XCode來編寫,普通的命令行程序就可以了,下面是本人的實現代碼:
#import <Foundation/Foundation.h> #import "NetworkTools.h" #import "TSLogger.h" int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSLog(@"Hello, World!, %@",[NetworkTools ipAddr]); [[TSLogger shanreInstance] connect]; NSTimer *timer = [NSTimer timerWithTimeInterval:5 target:[TSLogger shanreInstance] selector:@selector(beat:) userInfo:nil repeats:YES]; [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes]; [[NSRunLoop mainRunLoop] run]; while (YES) { [[NSRunLoop mainRunLoop] runUntilDate:[NSDate distantFuture]]; } } return 0; }
這里避免主線程結束,在runloop中添加了一個timer,這個timer什么事情也沒有做,主要是避免runloop結束。
上面的主程序中,就可以在主線程中異步執行一些事件,本人的代碼中所做的事情是向服務器每隔2s發送一個數字,這個數字累加。
下面是累加的結果:
編寫這個控制台程序的時候,注意需要將工程的CPU架構設置為armv7,armv7s,不然會遇到 bad cpu type的錯誤。
第二個部分是plist,plist中描述了守護程序的位置,已經啟動的參數,然后將這個plist拷貝到/System/Library/LaunchDaemons/中
下面是程序的plist:
參考資料:
http://blog.csdn.net/yiyaaixuexi/article/details/8293020
注:請不要利用上面博客中的代碼、用於非法目的。博客中思路僅供學習研究IOS系統實現,提高IOS開發技能。