在Objective-C中访问来自不同类的变量

Dan*_*anM -4 objective-c ios

我需要帮助从一个类到另一个类读取变量.我已经对此有了一些答案,但没有成功.

PP.h:

@interface PP : UIViewController
{
@public int fNum;
}

@property (readwrite, nonatomic) int fNum;

- (IBAction)setSomeNum;

@end
Run Code Online (Sandbox Code Playgroud)

PP.m:

@synthesize fNum;

- (IBAction)setSomeNum
{
fNum = 69;
NSLog(@"Set Num Activated %d",fNum); //OK
}
Run Code Online (Sandbox Code Playgroud)

TryView.m:

#import "TryView.h"
#import "PP.h"

@interface TryView ()

@end

@implementation TryView
- (void)viewDidLoad
{
[super viewDidLoad];

PP *obj ;
int x = obj.fNum;
NSLog(@"Happines %d",x); //Prints 0
}
@end
Run Code Online (Sandbox Code Playgroud)

有什么不对,为什么打印0?

小智 8

你正在做的事情本质上是未定义的行为,所以很高兴它没有崩溃.

PP *obj ;
int x = obj.fNum;
Run Code Online (Sandbox Code Playgroud)

从根本上说是错误的 - 你不是在创建/初始化对象,所以obj是一个悬空指针,它可以指向任何一个(即垃圾)并在访问时崩溃.即使您创建了该对象,您也应该setSomeNum在其上调用该方法 - 它不会被自动调用(为什么要这样?).总而言之,你必须写下这个:

PP *obj = [[PP alloc] init];
[obj setSomeNum];
int x = obj.fNum;
Run Code Online (Sandbox Code Playgroud)

等等