dispatch_asyncコントローラーからクラス myClass のオブジェクトを初期化し、3 つの異なる関数内でこのオブジェクトに対して 3 つのメソッドを実行します。ここにmyClassがあります:
@interface myClass : NSObject
@property (retain) NSString* aString;
-(void)method1;
-(void)method2;
-(void)method3;
@end
@implementation myClass
@synthetize aString;
-(void)method1 {
aString = [NSTemporaryDirectory() stringByAppendingPathComponent:@"my_file"];
[someData writeToFile:aString];
// ...
}
-(void)method2 {
// ...
}
-(void)method3 {
aFunction([aString UTF8String]);
}
@end
そしてコントローラー
-(void) viewDidLoad{
myClass* myObject = [[myClass alloc] init];
}
-(void)meth1 {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[myObject method1];
});
}
-(void)meth2 {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[myObject method2];
});
}
-(void)meth3 {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[myObject method3];
});
}
meth1、meth2およびmeth33 つの特定の通知を受信したときに実行されますが、常に同じ順序で 1 回実行されます。
がmeth3実行されると、 が得られ[NSPathStore2 UTF8String]: message sent to deallocated instance 0x107eb36a0ます。NSZombie を有効にすると、Instruments はaStringlibdispatch.dylib によってリリースされたことを通知します。copy. _ aString_ method1_ method3_ それにもかかわらず、私はそれが正しい方法だとは思いません。libdispatch によってインスタンス変数の割り当てが解除されるのは奇妙に思えます。ご協力いただきありがとうございます。