gpt4 book ai didi

iphone - 如何在 Objective-C 中使用继承(iOS SDK)

转载 作者:可可西里 更新时间:2023-11-01 04:14:43 26 4
gpt4 key购买 nike

刚开始学习iOS编程,对继承有疑惑。有 2 个文件。

第一个文件

标题

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController {
int x;
}
@end

实现:

#import "ViewController.h"
#import "NewClass.h"
@implementation ViewController
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
x = 999;
NewClass *myClass = [[[NewClass alloc] init] autorelease];
}
@end

第二个文件

标题:

#import "ViewController.h"

@interface NewClass : ViewController
@end

实现:

#import "NewClass.h"
@implementation NewClass

-(id)init {
self = [super init];
if (self != nil) {
NSLog(@"%i",x);
}
return self;
}
@end

在 ViewController 中我将 x 设置为 999,在 NewClass 中我想得到它,但是当我调用 NSLog(@"%i",x); 时它给了我 0。

我哪里做错了?

最佳答案

您遇到了时间问题。

  1. 首先调用 init 方法(在继承层次结构的所有级别,因此在 ViewControllerNewClass 中)。这是当您打印出 x 的值时,它仍为零。

  2. viewDidLoad 方法只会在很久之后被调用,通常是在 View Controller 的 View 被添加到父 View 之后的某个时刻。它是特定于 UIViewController 类的功能。

要使您的示例正常工作,请在您的 ViewController 类中放置一个 init 方法,它看起来像您的 NewClass 类中的方法,然后设置x 在那里。

此外,您不需要在 ViewController 中创建 NewClass 实例。当您创建一个 NewClass 对象时,它也会自动成为一个 ViewController。就像狗自动是动物一样,猫也是。当你创造一只狗时,你不想同时创造一只动物!

正如 sidyll 所说,恐怕您应该多读一些关于继承如何工作的书!

关于iphone - 如何在 Objective-C 中使用继承(iOS SDK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8479225/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com