解决方案 »
- coverflow的问题.
- 新手求解释if((self=[super init])){...}双小括号的作用
- IOS移动开发 应用程序互相切换问题
- 如何用正则式分离出 A B C D 选项,android 分离可以,但ios全空谢谢
- iOS 第三方类库的学习方法
- 小弟自学IOS开发已经学习到protocol Block
- 解的旧书学cocoa,攒了好多问题,求大神解惑
- IOS 文章列表,且点击弹框的怎么搞,求指导~
- iOS 相册读取二维码
- ios 对话框消失后,软键盘自动弹出又自动消失了
- iOS开发?
- app审核退回三次了,刚会用Re-Sysbomlicate,终于定位到问题,但是怎么解决呢?急死了
int i=10000;
NSString * data;
dispatch_queue_t queue = dispatch_queue_create("com.wang.queue", NULL);
while(i>0)
{
@autoreleasepool {
data = [[NSString alloc]initWithFormat:@"%i",i];
NSString * str = data;
dispatch_async(queue, ^{{
[self print:str];
}});
i--;
}
}
}-(void) print:(NSString*)str
{
NSLog(@"%@",str);
str = nil;
}
另外,对于autoreleasepool的原理,看了一些博客,还是不太懂。
很多都说,当pool被释放时,pool中所有的对象都会被调用release。这里的“pool中所有的对象”指的是哪些?是指在autoreleasepool中alloc的,还是指哪些?
- (IBAction)action:(id)sender {
int i=10000;
dispatch_async(dispatch_get_global_queue(0, 0), ^(){
dispatch_apply(i, dispatch_get_global_queue(0, 0), ^(size_t index){
NSLog(@"index is :%d",index); //////
});
NSLog(@"done");
});
}因为是并行操作,上面输出的index 是无序的
data = [[NSString alloc]initWithFormat:@"%i",i];
NSString * str = data;
dispatch_async(queue, ^{{
[self print:str];
}});
i--;
// [data release];
}
block里面的self可能处在循环引用,
试过了,像下面的代码,改了弱引用也一样,内存还是减不下来:- (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--;
}
}
}
照你的方法改了,内存没减下来:下面的图片是连续点了5次button,全部运行完之后的内存情况,占用很大的内存,此时并没有“com.wang.queue”这个线程:
用instruments 观察内存状况,主要集中在“VM:performance tool data”这一项:
详细看是这样的:
所以我觉得data的内存是已经释放了,但是用于维持线程的一些东西却一直存在。却不知这些占用内存的究竟是什么?也不知
我的理解对不对。
照你的方法改了,内存没减下来:下面的图片是连续点了5次button,全部运行完之后的内存情况,占用很大的内存,此时并没有“com.wang.queue”这个线程:
用instruments 观察内存状况,主要集中在“VM:performance tool data”这一项:
详细看是这样的:
所以我觉得data的内存是已经释放了,但是用于维持线程的一些东西却一直存在。却不知这些占用内存的究竟是什么?也不知
我的理解对不对。
说实话,我在ARC下看内存真的没有特别准过。。