保留布尔类型

时间:2016-03-10 07:45:52

标签: objective-c

当我这样做时

[itsBool autorelease];
itsBool = [aBool retain];

我有警告:Receiver BOOL不是id或接口指针。 你能解释一下为什么好吗? 感谢

3 个答案:

答案 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。

希望这有帮助!