从Objective-C中的其他类访问方法

时间:2012-08-27 10:22:34

标签: objective-c xcode macos class methods

我有Class1Class2SubclassOfClass2。我想从SubclassOfClass2调用Class1中的方法。我这样做:

Class2 *class = [[Class2 alloc] init];
[class someMethod];

但是,正如我猜测的那样,由于alloc,所有变量值都会在此之后丢失。这是因为:

正在执行运行时Class2。它设置了变量float x = image.size.width。它返回正确的值。稍后,例如用户按下按钮后,正在执行Class1。从someMethod变量Class1致电x后,返回0.00000。如何让它工作,以便变量值不会丢失?

正如我被问到的,这是我的someMethod代码:

-(void)someMethod {
NSLog(@"%f", x);
}

在运行时,该方法返回3200.00000,当从Class1调用它时,它返回0.00000。变量xClass2中声明,方法someMethodSubclassOfClass2


Class1.h

@interface Class1

@end

Class1.m

#import "Class1.h"
#import "Class2.h"

@implementation Class1
-(IBAction)buttonPressed:(id)sender {
Class2 *class = [[Class2 alloc] init];
[class someMethod];
}
@end

Class2.h

@interface Class2 {
 float x;
}
@end

Class2.m

#import "Class2.h"
#import "SubclassOfClass2.h"

@implementation Class2
- (id)initWithCoder:(NSCoder *)coder {
    x = 3200;
    [self someMethod];
    return self;
}
@end

SubclassOfClass2.h

#import "Class2.h"

@interface Class2 (subclass) {
}
-(void)someMethod;
@end

SubclassOfClass2.m

#import "SubclassOfClass2.h"
@implementation Class2 (subclass)
 -(void)someMethod {
   NSLog(@"%f", x);
 }
@end

1 个答案:

答案 0 :(得分:2)

它返回0.00000,因为您正在调用init。这是与initWithCoder:不同的方法,x是设置class的方法。

(其他问题:让你的类继承NSObject作为基类,不要使用{{1}}作为变量名...尤其是当它不是类对象时。)

相关问题