Kop*_*Bob 5 iphone model-view-controller objective-c ios
我刚开始学习iOS编程,我的继承问题.有2个文件.
第一个文件
头
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController {
int x;
}
@end
Run Code Online (Sandbox Code Playgroud)
执行:
#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
Run Code Online (Sandbox Code Playgroud)
第二档
标题:
#import "ViewController.h"
@interface NewClass : ViewController
@end
Run Code Online (Sandbox Code Playgroud)
执行:
#import "NewClass.h"
@implementation NewClass
-(id)init {
self = [super init];
if (self != nil) {
NSLog(@"%i",x);
}
return self;
}
@end
Run Code Online (Sandbox Code Playgroud)
在ViewController中我将x设置为999,而在NewClass中我想得到它,但是当我调用NSLog(@"%i",x);它时,它会给我0.
我在哪里弄错了?
你有时间问题.
该init方法被称为第一次(在继承层次结构的各个层面,所以在这两个ViewController和NewClass).这是当你打印出你的值时x,它仍然为零.
该viewDidLoad方法仅在稍后调用,通常在将视图控制器的视图添加到超级视图之后的某个点.它的功能是特定于UIViewController课程的.
要使您的示例正常工作,请init在您的ViewController类中放置一个类似于您的NewClass类中的方法,并在那里设置x.
此外,您不需要在其中创建NewClass实例ViewController.创建NewClass对象时,它也会自动生成ViewController.就像狗是自动动物一样,猫也是如此.当你创造一只狗时,你也不想创造一只动物!
正如sidyll所说,你应该多做一些关于继承是如何工作的阅读,我害怕!
您需要检查OOP概念.使用Objective-C进行面向对象的编程是必须的.
你的类NewClass确实继承了x变量,但不是它的值.当您创建它的实例时,您将创建一个闪亮的新实例,其值与父类无关.
帮助你的另一个观点x是在ViewController类的对象中设置.在NewClass继承ViewController 类,而不是从任意实例(对象,在其中设置x).
| 归档时间: |
|
| 查看次数: |
2022 次 |
| 最近记录: |