【问题标题】:Allocating and Initializing in implementation .m file in Objective-C xcode在 Objective-C xcode 中的实现 .m 文件中分配和初始化
【发布时间】:2012-11-23 04:01:02
【问题描述】:

我正在尝试在程序的实现部分下初始化一个对象,因为我计划将同一个对象用于多个方法。尝试执行此操作时出现错误,我只是想知道为什么。以下是一些示例:

@implementation Fraction {
    NSString *test = [[NSString alloc] init];
}

@implementation Fraction {
    int x = 0;
}

虽然如果您不初始化变量,它们可以正常工作,不会出现任何错误或警告。我确定这就是代码的设计方式,但我只是好奇为什么。提前感谢您的回答!

【问题讨论】:

    标签: objective-c initialization implementation allocation


    【解决方案1】:

    @implementation 的花括号部分仅用于声明实例变量。您不能初始化它们或将任何其他代码放在那里。

    初始化实例变量的正确位置是在init 方法中:

    @implementaiton Fraction {
        NSString *test;
        int x;
    }
    
    - (id)init {
        if ((self = [super init])) {
            test = @"";
            x = 0;
        }
    
        return self;
    }
    

    【讨论】:

      【解决方案2】:

      通过将 @implementation 括在大括号中,您是在声明 iVar,而不是声明常量。即使您没有尝试声明常量,如果您希望变量保持“初始值”,您也需要将初始化移动到-init 风格的方法中。如果您尝试声明一个常量,则需要在 @implementation 块之外完成。

      【讨论】:

        【解决方案3】:

        @implementation 部分中,您不能初始化任何变量,只能声明它们。其他的使用- (id) init方法,因为它是在分配之后逻辑调用的,像这样:[[CustomObjectClass alloc] init]; 另外,要声明私有变量,建议在你的.m文件中使用类扩展,像这样:@interface CustomClassName()

        【讨论】:

        • 你不能在@implementation块中初始化变量,即使是常量。尝试一下。 @implementation 部分中的 ivars 是私有 ivars。不需要类扩展。
        猜你喜欢
        • 2010-09-14
        • 1970-01-01
        • 2010-11-02
        • 1970-01-01
        • 2012-07-22
        • 2014-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多