当我这样做时
[itsBool autorelease];
itsBool = [aBool retain];
我有警告:Receiver BOOL不是id或接口指针。 你能解释一下为什么好吗? 感谢
答案 0 :(得分:1)
BOOL是一种值类型,就像C结构一样。您无法引用BOOL值。 BOOL也不是Objective-C对象类型,因此您不能保留/释放BOOL类型的值或向它们发送消息。人们经常将非对象类型称为原始类型。
BOOL按值传递 - 只要将它们分配给变量,它们就会被复制:
BOOL x = YES ; // x contains the value YES (not a reference to YES)
BOOL y = x ; // the value of x is copied to y
BOOL x = NO ; // we assign new contents to x; the value of y is still YES
所以,无论如何都不需要保留/释放它们。
为了比较,在处理Objective-C对象引用时:
NSMutableString * x = [ NSMutableString string ] ; // x is a reference to a newly-created NSMutableString object
NSMutableString * y = x ; // y contains a copy of x, a reference to the mutable string we created previously. y and x refer to the same string object
[ x appendString:@"appended" ] ; // we alter the mutable string referred to by x
// y and x both point to the same mutable string, which now contains "appended".
NSLog(@"%@\n", x ) ; // prints "appended"
NSLog(@"%@\n", y ) ; // also prints "appended"
答案 1 :(得分:0)
BOOL
是一种原始类型。您无法发送消息。您无法释放或保留它。这只能通过“真正的”Objective-C对象实现。
答案 2 :(得分:0)
您可以对指针对象执行保留/释放(后缀为*)。 BOOL是一种原始数据类型,就像int / double / float / long。
希望这有帮助!