私はdispatch_asyncを使用する関数を持っています:
- (IBAction)action:(id)sender {
int i=10000;
NSString * data;
dispatch_queue_t queue = dispatch_queue_create("com.wang.queue", NULL);
__weak ViewController* weakSelf = self;
while(i>0)
{
@autoreleasepool {
data = [[NSString alloc]initWithFormat:@"%i",i];
NSString * str = data;
dispatch_async(queue, ^{{
[weakSelf print:str];
}});
i--;
}
}
}
-(void) print:(NSString*)str
{
NSLog(@"%@",str);
str = nil;
}
そして、ボタンを5回連続で押します。それが完全に実行された後、メモリは減少しませんでした。そこで、Instrument を使用して、メモリが占有されている場所を分析します。このように:</p>
「データ」のメモリが解放されたことが示されました。メモリを占有していたのは「VM:パフォーマンスツールデータ」です。詳細は次のとおりです。
「dispatch_async」に関する何かが解放されなかったと思います。
記憶がこのように機能する理由を誰が教えてくれますか? 感謝 !