後釋放我有一個使用dispatch_async功能: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;
}
然後我按連續五次的按鈕。在運行完成後,內存不會減少。所以我用Instrument來分析內存被佔用的地方。 這樣的:
結果表明, 「數據」 的內存被釋放。這是佔用內存的「VM:性能工具數據」。細節是:
我想一想 「dispatch_async」 什麼東西永遠不會被釋放。
誰能告訴我是什麼讓內存這樣執行?感謝!
「self」在保留它的塊中被引用,但該方法也保留該塊,因此形成保留週期。在塊外聲明'__weak MyObjType * weakSelf = self;'並在塊內使用'weakSelf'而不是'self'。 – 2014-11-22 14:24:10
我已經改變了我的代碼,如你所說,像這樣: __weak ViewController * weakSelf = self; 然後[weakSelf print:data]; 但沒有任何改變。 你會在xcode中試用嗎?謝謝! – Allen 2014-11-22 16:34:35
@Achilles這不是一個保留週期(強參考週期)。 – Rob 2014-11-22 16:53:04