【问题标题】:Init Not Returning Self初始化不返回自我
【发布时间】:2012-10-18 14:14:55
【问题描述】:

我有我的默认初始化程序:

- (id)init
{
    if ((self = [super init]))
    {   
    }

    return self;
}

我只在我的班级中包含了这个方法来跟踪它是否正在执行它的工作,据我所知,它是。

Self 正在设置,在控制台中我可以看到 self 的内存地址不是 0x0000000。例如,这是我刚刚尝试运行的控制台:

self    IssueManager *  0x08383ad0

但是,当方法返回self到这个方法时:

- (id)initWithNibName:(NSString *)nibNameOrNil
               bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

        if (self)
            self.issueManager                           = [[IssueManager alloc] init];

        return self;
    }

self.issueManager 仍然是一个空指针:

_issueManager   IssueManager *  0x00000000

我不知道为什么会这样,但希望能得到任何帮助。

【问题讨论】:

  • 我们可以看看你在哪里声明了 IssueManager 吗?

标签: objective-c xcode initialization


【解决方案1】:

而不是使用:

self.issueManager

尝试:

issueManager = [[IssueManager alloc] init];

请记住,使用点表示法只是使用@property 和@synthesize 提供的访问器/设置器方法。在您的 init 方法中,您不应使用访问器/设置器方法。

【讨论】:

  • 我删除了 self.issueManager 并将其替换为 _issueManager。然后 IDE 警告我,将其分配给弱指针意味着到函数结束时它已经被设置为 nil。因此,我按照你说的做了,也做了一个强有力的指针。这解决了这个问题。 4分钟后我会接受你的回答,谢谢。
【解决方案2】:

我不会在-init* 中使用访问器(请阅读:Why shouldn't I use Objective C 2.0 accessors in init/dealloc?

Apple 对此也有声明。

尝试改为:

_issueManager = [[IssueManager alloc] init];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 2015-06-28
    • 2011-02-06
    • 1970-01-01
    • 2017-05-19
    • 2015-06-22
    相关资源
    最近更新 更多