我想了解更多關於objective-c線程的知識,所以我做了一個測試程序,它只是循環輸出循環的迭代。 但是,我得到的輸出不是我所期望的。我有一個想法,爲什麼,但首先這裏是我的代碼:Objective-C線程
的main.m
#import <Foundation/Foundation.h>
#import "Car.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Car* myCar = [[Car new] autorelease];
[myCar performSelectorInBackground:@selector(LoopAndSay) withObject:nil];
for(int i = 0; i < 100; i++)
{
NSLog(@"Main loop on %i", i);
}
}
return 0;
}
Car.m
#import "Car.h"
@implementation Car
@synthesize name, model;
-(void) LoopAndSay {
for(int i = 0; i < 100; i++)
{
NSLog(@"Looping for the %i time", i);
}
}
@end
現在,如果我運行它的背景是循環有時不會完成(在迭代94和97之間停止)。另外,如果我切換我的代碼,以便在主線程循環之後不調用後臺循環,那麼它將不會運行任何迭代。 這是因爲主線程已完成並且不想等待後臺線程運行完成?如果是這樣,有沒有辦法強制程序繼續運行,直到主線程和後臺線程都完成了?
我還想補充說,一切從main.m開始執行如果它不是從main.m調用,或者從main.m調用的某些東西不調用你的函數,它將不會被執行。 – 2013-04-08 18:50:25
我甚至沒有考慮過在後臺線程完成(甚至開始)之前退出autorelease池的範圍。現在它變得更有意義。謝謝! – 2013-04-08 18:51:52
@DanielMartin,但請閱讀編輯。這不是因爲你退出autorelease池的範圍,這是因爲你離開了'main'函數。 – zneak 2013-04-08 18:53:25