从另一个文件调用方法
我是Objective-C的初学者。我想从文件me.m
中调用文件you.m
中的方法two
。你能教我用下面的简单例子来理解。谢谢!从另一个文件调用方法
you.h
#import <Foundation/Foundation.h>
@interface you : NSObject {
}
- (NSString *)one;
- (NSString *)two;
@end
you.m
#import "you.m"
@implementation you
- (NSString *)one {
NSString *a = @"this is a test.";
return a;
}
-(NSString *)two {
NSString *b = [self one];
return b;
}
@end
me.h
#import <Foundation/Foundation.h>
@interface me : NSObject {
}
@end
me.m
#import "you.h"
#import "me.h"
@implementation me
-(void)awakeFromNib{
//NSString *obj = [[[NSString alloc] init] autorelease];
//NSString *str = [obj two]; // dont work
//NSString *str = [self two]; // dont work
// I'd like to call method *two* from here.
NSLog(@"%@", str);
}
@end
在me
类,建立you
一个实例。
you *objectYou=[you new];
由于two
返回一个字符串,你需要将它存储:
NSString *string=[objectYou two];
在您的代码:
-(void)awakeFromNib{
you *objectYou=[you new];
NSString *str = [objectYou two];
NSLog(@"%@", str);
}
注:按照命名规则。类名必须以大写字母开头,如Me,您。
编辑:
当你正在学习,我想补充一点,因为你是从调用two
one
。如果one
不意味着被称为you
类之外。您可以在.m
中定义它,并从.h
中删除声明。
很简单,在Me
类中创建一个You
类的实例并调用该成员函数。像这样 -
you *youInstance = [[you alloc] init];
NSString *retStr = [youInstance two];
顺便说一句,它是一个很好的做法,CamelCase类名。
还要注意这一点 -
@interface you
- (NSString *) twoInstanceMethod;
+ (NSString *) twoClassMethod;
@end
NSString *retStr = [you twoClassMethod]; // This is ok
NSString *retStr = [you twoInstanceMethod]; // this doenst't work, you need an instance:
//so we create instance.
you *youInstance = [[you alloc] init];
NSString *retStr = [youInstance two];
希望这将清除一些概念...
怎么样从两个返回字符串? – 2013-05-05 03:10:49
,我把它留给@Dede来填补空白。但为了完整起见,我会编辑我的答案。 – 2013-05-05 03:11:53
不错的答案喜欢它:) – 2013-05-05 03:13:43
啊,我知道了。非常感谢你! – 2013-05-05 03:20:19