Iphone clipsToBounds=YES是否会减少我的内存占用?
我有一个相当大的视野,大概是1000 x 1000。所以我做了clipToBounds=是的。这会为视图生成更小的位图吗?我不这么认为Iphone clipsToBounds=YES是否会减少我的内存占用?,iphone,Iphone,我有一个相当大的视野,大概是1000 x 1000。所以我做了clipToBounds=是的。这会为视图生成更小的位图吗?我不这么认为clipstobunds指的是子视图,而不是视图本身。UIView文档建议对特别大的视图使用CATiledLayerCATiledLayer应该会降低内存占用,因为它只加载视图中实际显示给用户的部分(有点像Google Maps加载地图分幅) 编辑:顺便说一下,UIKit足够聪明,不会渲染不可见的内容,因为它不在屏幕上,或者被其他视图遮挡。但是,由于您已经将整个视
clipstobunds
指的是子视图,而不是视图本身。UIView
文档建议对特别大的视图使用CATiledLayer
CATiledLayer
应该会降低内存占用,因为它只加载视图中实际显示给用户的部分(有点像Google Maps加载地图分幅)
编辑:顺便说一下,UIKit足够聪明,不会渲染不可见的内容,因为它不在屏幕上,或者被其他视图遮挡。但是,由于您已经将整个视图保存在内存中,这可能对内存使用没有帮助,但对渲染速度没有帮助。我认为可能没有-您仍然需要为视图分配内存,而不是显示它 您可能会得到非常轻微的性能提升,因为UIKit更了解什么/什么不可以绘制 不过,你可以自己回答这个问题!制作一个可生成1000个1000x1000视图的项目,并将其显示在屏幕上。然后在分析器中查看它的内存使用情况。然后将clipToBounds设置为“是”时执行相同操作,并查看它是否已更改 我预计不会,但我会对结果感兴趣——如果你这么做了,请把它们贴在这里 谢谢,山姆
编辑 在得到了非常合理的评论之后,我通过以下操作对其进行了测试: 1) 创建了一个新的XCode项目-窗口应用程序 2) 使用了以下代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch
[window setClipsToBounds:YES];
[window makeKeyAndVisible];
// Make some views
for (int n = 0; n < 100000; ++n) {
UIImageView *view = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.jpg"]];
[view setFrame:CGRectMake(0, 0, 1000, 1000)];
[window addSubview:view];
[view release];
}
return YES;
}
-(BOOL)应用程序:(UIApplication*)应用程序使用选项完成启动:(NSDictionary*)启动选项{
//应用程序启动后自定义的覆盖点
[窗口设置ClipsToBounds:是];
[WindowMakeKeyandVisible];
//发表一些看法
对于(int n=0;n<100000;++n){
UIImageView*视图=[[UIImageView alloc]initWithImage:[UIImageName:@“image.jpg”];
[视图设置框:CGRectMake(0,0,1000,1000)];
[窗口添加子视图:视图];
[查看发布];
}
返回YES;
}
3) 建造它
4) 从模拟器的新开始,在Instruments-Object分配中运行它
正如预测的那样,没有变化-在窗口中将clipstobunds
设置为YES或no时,大约需要16MB
然而,仍然存在一些问题-
a) 我使用UIImageView来确保我有需要为整个视图绘制的内容——UI层可能会针对UIView的不同子类进行不同的优化
b) 我在模拟器中运行了它(我手边没有iPhone,我的手机坏了)-我99%肯定它在设备上会有任何不同,但我也知道模拟器的内存泄漏不是100%准确,所以在设备上测试可能也是一个好主意。clipsToBounds会大大降低性能。在打开clipsToBounds的情况下,尝试在滚动视图中放置一组视图,然后在视图中实际需要剪裁的区域(例如,视图有一个圆角半径)添加一些内容,然后运行并滚动。滚动将非常不平稳
告诉处理器渲染得更少并不是让处理器的工作“更容易”,而是让处理器做更多的工作,即决定绘制什么和不绘制什么。这需要周期。为什么不这样做呢?这是一个150人的悬赏;-)(但谢谢你的提示,我很快就会试试)我刚刚好不容易才发现——然后在谷歌上搜索“ClipsTobunds jecky”,找到了这个帖子。我在滚动视图中有一组视图,每个视图都打开了剪贴簿。这些视图有圆角,我的滚动是不稳定的。我正在考虑在每个视图中创建一个子视图(具有规则的方形角),并尝试在该视图上设置clipsToBounds,而不是圆角视图。