objective-c - initWithNibName 如何工作?

标签 objective-c ios

我过去常常以编程方式创建我的 View ,并且已经开始使用 XIB 文件进行切换。我找到这段代码:

-(id)init
{
    self = [super initWithNibName:@"HelpViewController"  bundle:nil];
    if (self != nil) {
        // further initialization needed
    }

    return self;
}

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    NSAssert(NO, @"Initialize with -init");
    return nil;
}

它有效,但为什么呢?如果我遵循逻辑,initWithNibName 返回 nil 并将其设置为 self。所以,self 现在是 nil,然后你在 init 结束时返回 self。嗯,这意味着你返回 self,它是 nil。是吗?

另外,如果我想初始化一个 NSArray,我应该把它放在那个 init 函数的什么地方?

感谢您的解释。

Yko

最佳答案

因为init方法调用了self = [super initWithNibName...]。所以你必须调用init方法来创建对象。如果你使用 initWithNibName 它将失败

对于Array,你应该在init方法中初始化

-(id)init
{
    self = [super initWithNibName:@"HelpViewController"  bundle:nil];
    if (self != nil) {
        // further initialization needed
        myArray = [[NSMutableArray alloc] init];
    }

    return self;
}

关于objective-c - initWithNibName 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12902075/

相关文章:

objective-c - 按下按钮时如何禁用按钮数组中的其余按钮

Objective-C DEC 到 HEX

ios - 如何在 ios 中显示 3/4 全屏尺寸的广告?

ios - 正确获取可转换的核心数据元素

ios - 如何在滚动时隐藏和显示带有动画效果的标题 View

iOS/objective-C : Call AlertViewController from sharedInstance

objective-c - 在 Xcode 中使用点击功能制作图像的最佳方式?

ios - Pod 仓库推送私有(private)仓库遇到错误 : Repository not found

iOS:容器 View 添加UITapGestureRecognizer拦截UICollectionView的didSelectItemAtIndexPath方法

ios - 按 dateTimeString 属性对 NSMutableArray 对象进行排序