我想通过一个例子来了解以下文字的含义.我无法理解这些台词的真正含义.这些行来自谷歌的objective-c编码指南.
Initialization
Don't initialize variables to 0 or nil in the init method; it's redundant.新分配的对象的所有内存都初始化为0(isa除外),因此不要通过将变量重新初始化为0或nil来扰乱init方法.
我想通过一个例子来了解以下文字的含义.我无法理解这些台词的真正含义.这些行来自谷歌的objective-c编码指南.
Initialization
Don't initialize variables to 0 or nil in the init method; it's redundant.新分配的对象的所有内存都初始化为0(isa除外),因此不要通过将变量重新初始化为0或nil来扰乱init方法.
在引擎盖下,Objective-C对象基本上是C struct .每一个都包含一个名为isa
的字段,该字段是指向对象是其实例的类的指针(这就是对象和Objective-C运行时知道它是什么类型的对象的方式).
关于变量的初始化:在Objective-C中,实例变量会自动初始化为0
(对于int
这样的C类型)或nil
(对于Objective-C对象).苹果的指导方针说,将IVAR初始化为init
方法中的那些值是多余的,所以不要这样做.例如,假设你上过这样的课:
@interface MyClass : NSObject
{
int myInt;
double myDouble;
MyOtherClass *myObj;
}
@end
以这种方式编写init
方法是多余的,因为这些IVAR将被初始化为0
或nil
:
@implementation MyClass
- (id)init
{
if ((self = [super init])) {
myInt = 0;
myDouble = 0.0;
myObj = nil;
}
return self;
}
@end
你可以这样做:
@implementation MyClass
- (id)init
{
return [super init];
}
@end
当然,如果希望将IVAR初始化为0
或nil
以外的值,仍然应该初始化它们:
@implementation MyClass
- (id)init
{
if ((self = [super init])) {
myInit = 10;
myDouble = 100.0;
myObj = [[MyOtherClass alloc] init];
}
return self;
}
@end