消息循环接收到事件之后创建的自动释放池,什么时候销毁

 我来答
果雅0Lp
2017-02-10 · TA获得超过168个赞
知道小有建树答主
回答量:592
采纳率:0%
帮助的人:153万
展开全部
解题思路:首先根据类方法创建的,而且他们都用的是类方法,类方法是每次调用,每次都会为你创建一个新的对象。还有就是通过对象方法创建的对象,如果不是通过alloc new retain copy 创建的对象,那么他们内部都有一个autorelease.(可以通过NSLog(@"%p",str),查看每次调用过后的内存地址,他们的内存地址是不一样的),他们都是通过自动释放池进行自动释放的,所以这些字符串对象会等到循环结束时才会进行释放,而此时它们会消耗大量的内存资源,所以她们存在内存问题。---通过xcode查看内存峰值就可以看出运行时的变化
解决办法:从题中看出每次循环这个对象就不会再调用了,所以,我们可以将每一次循环放入到自动释放池中去,这样每次循环结束后变会将此次创建的对象销毁,如下代码
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
int lagerNum = 1024 * 1024 * 2 ;
for(int i = 0 ; i < lagerNum; i++)
{
@autoreleasepool{
NSString *str = [NSString stringWithFormat:@"Hello"];
str = [str uppercaseString];
str = [NSString stringByAppendingFormat:@"-%@",@"World!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式