Jon*_*an. 0 iphone objective-c
我一直在关注iTunes U上的斯坦福大学iphone视频.看到老师试图做类似这段代码的事情,但他意识到并说它没有用,虽然我没理解:
- (IBAction)flashPressed{
if (window.backgroundColor == [UIColor magentaColor]){
window.backgroundColor = [UIColor redColor];
}else {
window.backgroundColor = [UIColor magentaColor];
}
}
Run Code Online (Sandbox Code Playgroud)
Objective-C,基于Windows的应用程序.不确定你还需要知道什么.
它不工作的原因是UIView
的backgroundColor
是一个copy
性质.它的声明如下:
@property(nonatomic, copy) UIColor *backgroundColor;
Run Code Online (Sandbox Code Playgroud)
这意味着当您获得的颜色对象[UIColor redColor]
被设置backgroundColor
为时,将复制整个对象,并且将保留的副本位于UIView
与UIColor
类对象保留的内存地址不同的内存地址上.
==
检查指针是否相同,这意味着只有当两个指针指向同一个对象时它才会成功.这是你有时想做的事情.例如:
if ([aView superView] == self)
[aView removeFromSuperview];
Run Code Online (Sandbox Code Playgroud)
在这里,你要确保aView
超级视图实际上是这个对象,而不仅仅是根据某些标准"相同"的对象.
但是当你比较两个字符串时,你(几乎总是)对它们是否包含相同的字符感兴趣,并且它们是否在不同的内存地址上并不重要.因此你使用:
if ([aString isEqualToString:anotherString]) // faster than isEqual:
Run Code Online (Sandbox Code Playgroud)
在我们的颜色示例中,它是相同的:我们想知道这两个对象是否都代表红色,而不是两个指针是否指向完全相同的对象.
如果backgroundColor
声明属性是retain
您可以使用的==
,并且它会工作直到UIColor
由于某种原因重新分配其redColor
对象.这不太可能发生,但是要强调的是,对象代表了一种独特的东西,像字符串和颜色这样的对象通常copied
不是"保留".只能有一种颜色为红色,并且只能有一个包含"Hello world!"字符的字符串.因此,最终归结为一种形而上学的论证.
归档时间: |
|
查看次数: |
1858 次 |
最近记录: |