伙计们可以解释一下if(!origin)意味着什么!
-(void) setOrigin: (XYPoint *) pt {
if (! origin)
origin = [[XYPoint alloc] init];
origin.x = pt.x; origin.y = pt.y;
}
答案 0 :(得分:0)
如果没有来源。 ' !
'在if语句中表示如果不是这样。
你的代码做了什么,它是否检查是否有来源,如果它没有创建新的代码。之所以这么做是因为你不想创造不止一个来源。
希望这会有所帮助。如果您还有其他问题,请随时提出。 :)
答案 1 :(得分:0)
发布的代码看起来很有趣。在外部,该方法似乎承诺将某个对象的origin
属性设置为传递点(pt)的值。在内部,如果尚未设置origin属性,它似乎只会这样做。
关于'!'在最低级别,是否是操作员!测试非零。当应用于布尔值时,如YES或NO,它们实际上是标量1或0,它充当逻辑NOT操作......
!YES is the same as !1 and equals NO
!NO is the same as !0 and equals YES
在问题的代码中,! idio应用于非标量值,对象指针,但它在低级别执行相同的操作,测试非零值,在这种情况下为非零:
SomeObject *someObject = nil;
!someObject is the same as !nil and the same as !0 and equals YES
如果已分配对象,则指针someObject具有非零值,因此
SomeObject *someObject = [SomeObject alloc];
!someObject equals NO
这个成语的一个常见用途是懒惰的吸气剂。属性最初为零,然后在第一次请求时给出非零值。
- (NSString *)someStringProperty {
if (!_someStringProperty) {
// this runs the first time, but not again because we set
// _someStringProperty to be non-nil here
_someStringProperty = @"hello world";
}
return _someStringProperty;
}