![iphone – UIView.subviews和[NSView子视图]之间的行为差异,第1张 iphone – UIView.subviews和[NSView子视图]之间的行为差异,第1张](/aiimages/iphone+%E2%80%93+UIView.subviews%E5%92%8C%5BNSView%E5%AD%90%E8%A7%86%E5%9B%BE%5D%E4%B9%8B%E9%97%B4%E7%9A%84%E8%A1%8C%E4%B8%BA%E5%B7%AE%E2%80%8B%E2%80%8B%E5%BC%82.png)
NSArray* subVIEws = self.subvIEws;for( UIVIEw *aVIEw in subVIEws ) { [aVIEw removeFromSupervIEw];} 这很好用.事实上,在Mac OS X应用程序(来自NSVIEw子类)中尝试几乎相同的东西之前,我从未真正考虑过它:
NSArray* subVIEws = [self subvIEws];for( NSVIEw *aVIEw in subVIEws ) { [aVIEw removeFromSupervIEw];} 这完全不起作用.具体来说,在运行时,我得到这个:
*** Collection <NSCFArray: 0x1005208a0> was mutated while being enumerated.
我最终这样做:
NSArray* subVIEws = [[self subvIEws] copy];for( NSVIEw *aVIEw in subVIEws ) { [aVIEw removeFromSupervIEw];}[subVIEws release]; 没关系.然而,令我烦恼的是,为什么它适用于iPhone?
子视图是一个复制属性:
@property(nonatomic,Readonly,copy) NSArray *subvIEws;
我的第一个想法是,当指定复制属性时,@ synthesize’d getters可能会返回一个副本. The doc对于setter的副本的语义很清楚,但似乎没有对getter说出任何一种方式(或者至少对我来说不明显).实际上,做了我自己的一些测试,显然似乎并非如此.哪个好,我认为返回副本会有问题,原因有几个.
所以问题是:上面的代码如何在iPhone上运行? NSVIEw显然返回了一个指向实际子视图数组的指针,也许UIVIEw不是.也许它只是UIVIEw的一个实现细节,我不应该对此有所了解.
谁能提供任何见解?
解决方法 这是 – [NSVIEw子视图]中的错误.我本可以发誓这是针对SNow Leopard的,但现在找不到任何证据.幸运的是,有一种更简单的方法可以删除所有子视图:
[self setSubvIEws:[NSArray array]];总结
以上是内存溢出为你收集整理的iphone – UIView.subviews和[NSView子视图]之间的行为差异全部内容,希望文章能够帮你解决iphone – UIView.subviews和[NSView子视图]之间的行为差异所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)