iphone – UIView.subviews和[NSView子视图]之间的行为差​​异

iphone – UIView.subviews和[NSView子视图]之间的行为差​​异,第1张

概述我在iPhone应用程序中有一段代码,它从UIView子类中删除所有子视图.它看起来像这样: NSArray* subViews = self.subviews;for( UIView *aView in subViews ) { [aView removeFromSuperview];} 这很好用.事实上,在Mac OS X应用程序(来自NSView子类)中尝试几乎相同的东西之前,我 我在iPhone应用程序中有一段代码,它从UIVIEw子类中删除所有子视图.它看起来像这样:

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子视图]之间的行为差​​异所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1020762.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存