我有一个很大的视图,就像1000 x 1000.所以我做了clipToBounds = YES。这实际上会为视图产生更小的位图吗?clipsToBounds = YES是否减少我的内存占用?
回答
我想可能不是 - 你仍然需要为视图分配内存,而不是显示它。
随着UIKit了解更多关于什么/不绘制的内容,您可能会获得非常轻微的性能提升。
但是,您可以自己回答这个问题!制作一个项目,制作1000个1000x1000的视图并将它们放在屏幕上。然后看看Profiler中的内存使用情况。然后,将clipToBounds设置为YES并执行相同操作,看看它是否已更改!
我预测它不会但我会对结果感兴趣 - 如果你这样做,请张贴在这里!窗口 -
1)创建一个新的XCode项目:
谢谢,山姆
编辑
由mystify非常合理的意见之后,我做了以下测试它应用
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;
}
3)内置它
4)然它在工具 - 对象分配从模拟器的重新开始。
如预测的那样,没有变化 - 大约需要16MB,clipsToBounds
设置为YES或NO。
但是,仍然有几个问题 -
一)我使用一个UIImageView,以确保我有这样的需要绘制我的观点的全部内容 - UI层可以优化不同的不同UIView的子类。 b)我在模拟器中运行它(我没有iPhone,很方便,我的手机坏了) - 我99%肯定它在设备上没有任何不同,但我也知道模拟器对于内存泄漏并不是100%准确的,因此在设备上测试也是一个好主意。
我不这么认为。 clipsToBounds
是指子视图,而不是视图本身。 UIView
文档建议将CATiledLayer
用于特别大的视图。 CATiledLayer
应该会降低您的内存占用量,因为它只会加载实际显示给用户的视图部分(类似Google地图加载地图图块)。
编辑:顺便说一句,UIKit足够智能,不会呈现不可见的东西,或者是因为它不在屏幕上或被其他视图遮挡。但是,由于您已经在内存中保存了整个视图,因此这不会有助于提高内存使用率,但只能提高渲染速度。
clipsToBounds急剧降低性能。尝试在clipToBounds打开的情况下在滚动视图中放置一堆视图,然后在视图中需要实际剪辑的区域添加一些内容(例如视图具有圆角半径),然后运行并滚动。滚动将非常生涩。
你并没有让处理器的工作变得更容易,通过告诉它渲染得更少,你给它做了更多的工作来决定要画什么和不画什么。这占用了周期。
我刚刚发现这种困难的方式 - 然后做了谷歌搜索“clipsToBounds生涩”,并找到了这个线程。我在滚动视图中看到一堆视图,每个视图都打开了clipsToBounds。这些视图有圆角,我的滚动是生涩。我正在考虑在每个视图中创建一个子视图(使用常规方形角),并使用clipsToBounds对其进行设置,而不是使用圆角。 –
- 1. 减少内存占用
- 2. 减少内存占用量的Java集
- 3. 减少应用程序内存占用
- 4. iOS clipsToBounds YES和Shadow?
- 5. 减少我的应用程序的内存占用量
- 6. Solr内存使用 - 如何减少solr的内存占用
- 7. 共享库是否减少了WebSphere AppServer 7上的内存占用?
- 8. DLR的内存占用量是多少?
- 9. 如何减少Windows应用程序的内存占用
- 10. 减少内存
- 11. 减少大型陌生代码库的内存占用面积
- 12. 如何减少dygraphs图形的内存占用量
- 13. NSDocument和NSFileWrapper:减少内存占用的策略?
- 14. 减少一个Haskell程序的内存占用
- 15. 减少phonegap,sencha触摸在iOS(iPad)上的内存占用
- 16. Numpy:减少随机数据点积的内存占用
- 17. 减少Solaris上多个Java进程的内存占用(UNIX)
- 18. 如何减少apache的spark内存占用?
- 19. 减少文件操作的内存占用
- 20. 如何减少Android中位图占用的内存
- 21. 尽量减少Tomcat“每个连接”的内存占用量
- 22. 使用分配是否减少使用的内存量?
- 23. 如何减少ASP.NET MVC应用程序启动内存占用?
- 24. 是否可以减少MongoDB的内存使用量?
- 25. 从循环和列表减少内存占用
- 26. PassengerSpawnMethod“智能”不会减少内存占用?
- 27. 清空后减少std :: unordered_map内存占用空间
- 28. 通过多处理减少内存占用?
- 29. Visual Studio 2010 - 如何减少内存占用
- 30. 呈现在PDFSharp和最大限度地减少内存占用
你为什么不这样做?这是一个150代表赏金;-)(但感谢提示,要尽快尝试) – dontWatchMyProfile
一个非常公平的点;)看看我上面的编辑! – deanWombourne