在網(wǎng)上搜索了一下如何在IOS上面實現(xiàn)Daemon Process杯道,只有chrisalvares的博客中有過詳細的描述匪煌,但是其博客中描述的較為復(fù)雜责蝠,
參考stackoverflow中的一個問答:
080014542998873.jpg.png
綜合上面的實現(xiàn)方案,下面給出本人的實現(xiàn):
IOS Daemon的實現(xiàn)分為兩個部分萎庭,一個是守護程序的可執(zhí)行文件霜医,一個是描述可執(zhí)行文件的plist。
可執(zhí)行文件可以使用XCode來編寫驳规,普通的命令行程序就可以了肴敛,下面是本人的實現(xiàn)代碼:
#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;
}
這里避免主線程結(jié)束,在runloop中添加了一個timer吗购,這個timer什么事情也沒有做医男,主要是避免runloop結(jié)束。
上面的主程序中捻勉,就可以在主線程中異步執(zhí)行一些事件镀梭,本人的代碼中所做的事情是向服務(wù)器每隔2s發(fā)送一個數(shù)字,這個數(shù)字累加踱启。
下面是累加的結(jié)果
080022400495184.png
編寫這個控制臺程序的時候报账,注意需要將工程的CPU架構(gòu)設(shè)置為armv7,armv7s埠偿,不然會遇到 bad cpu type的錯誤透罢。
第二個部分是plist,plist中描述了守護程序的位置冠蒋,已經(jīng)啟動的參數(shù)羽圃,然后將這個plist拷貝到/System/Library/LaunchDaemons/中
下面是程序的plist:
080026498933656.png
注:請不要利用上面博客中的代碼、用于非法目的浊服。博客中思路僅供學(xué)習(xí)研究IOS系統(tǒng)實現(xiàn)统屈,提高IOS開發(fā)技能。