我想通过一个例子来了解以下文字的含义.我无法理解这些台词的真正含义.这些行来自谷歌的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将被初始化为0nil:

@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初始化为0nil以外的值,仍然应该初始化它们:

@implementation MyClass

- (id)init
{
    if ((self = [super init])) {
        myInit = 10;
        myDouble = 100.0;
        myObj = [[MyOtherClass alloc] init];
    }
    return self;
}

@end

Objective-c相关问答推荐

协议与类别

pathForResource 返回 null

使用 [NSBundle mainBundle] pathForResource: ofType:inDirectory: 访问文件

将 CFDictionaryRef 转换为 NSDictionary?

在 Objective-C 中在 iPhone 上使用 HTTP POST 和 GET 的教程

切换隐私设置将杀死应用程序

避免NSArray 在被枚举时发生Mutations

Crashlytics iOS - 记录捕获的异常

[NSNull null] 和 nil 有什么区别?

在Objective-C中替换字符串中的一个字符

NSManagedObjectContext:异常断点在 save: 方法处停止,但没有日志(log)/崩溃/错误

UIKeyboardBoundsUserInfoKey 已弃用,改用什么?

遍历 NSString 中所有字符的最有效方法

iPhone 正确使用 Application Delegate

为整个 iPhone / iPad 应用程序设置背景图像

UITableView ,重新加载时滚动到底部?

如何在不管理 UDID 和重新编译的情况下无线分发 ios 应用程序

performFetchWithCompletionHandler 永远不会被解雇

Xcode 如何加载主情节提要?

如何在对象内使用 objc_setAssociatedObject/objc_getAssociatedObject?