------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
以编写一个Person类为例
OC类的声明和实现如下:
Person.h文件中:
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
@public
NSString *_name; //姓名
int _age; //年龄
@private
NSString *_ID; //身份ID
}
- (void) show; //展示个人信息
- (void) runWithMethod:(NSString *)method ; //单个参数
- (void) speakWithWords:(NSString *)words AndMood:(NSString *)mood; //2个参数
//get方法
- (NSString *) name;
- (int) age;
- (NSString *) ID;
//set方法
- (void) setNameWithString:(NSString *)name;
- (void) setAgeWithInt:(int)age;
- (void) setIDWithString:(NSString *)ID;
//类方法(静态方法)
+ (void) classFunction;
@end
Person.m文件中
#import "Person.h"
// @implementation 中只是用来实现方法的具体内容
@implementation Person
// 无参数
- (void)show{
NSLog(@"我是%@,年龄%d,ID号是%@",_name,_age,_ID);
}
// 一个参数
- (void)runWithMethod:(NSString *)method{
NSLog(@"我在%@",method);
}
// 两个参数
- (void)speakWithWords:(NSString *)words AndMood:(NSString *)mood{
NSLog(@"我怀着%@的心情,说:%@",mood,words);
}
// get方法
- (NSString *)name{
return _name;
}
- (int)age{
return _age;
}
- (NSString *)ID{
return _ID;
}
// set方法
- (void)setNameWithString:(NSString *)name{
_name = name;
}
- (void)setAgeWithInt:(int)age{
_age = age;
}
-(void)setIDWithString:(NSString *)ID{
_ID = ID;
}
//类方法
+ (void)classFunction{
//该方法无法访问类的普通成员变量
NSLog(@"类方法驾到");
}
@end
main.m文件中
#import <Foundation/Foundation.h> //必须要引入的框架
#import "Person.h" //再引入自定义的person类的头文件
// 普通函数,非类的方法
void testWithString(NSString *str){
NSLog(@"打印%@",str );
}
int main() {
[Person classFunction]; //类方法,无需对象即可调用
// 先实例化一个对象,在调用类的方法
Person *p =[[Person alloc] init];
[p runWithMethod:@"跑步!"]; //调用类的方法
[p speakWithWords:@"天气真好!" AndMood:@"怪异的"];
p->_name = @"小华"; //可直接使用指针的方式在外部调用public范围的成员变量
p->_age = 15;
// p->_ID = @"123"; //private范围的变量无法直接调用
[p setIDWithString:@"456"];
[p show];
testWithString(@"一句话"); //一般函数的调用方法,同c一样
return 0;
}
从这3个文件的例子,可以看出如何创建一个oc对象,并在函数中使用,oc对象的创建可以简单写成如下形式:
1. .h文件中只写@interface的声明部分,这部分包含成员变量和类的方法声明。
2. .m文件中是@implementation关键字的实现方法的部分,类的方法要在这里定义实现。
3. 成员变量可以用关键字@public @protected @packaged@privated 修饰,分别限定变量到不同的作用范围,其中@protected是类变量默认的范围
4. 类的方法可以分为对象方法(用 - )和类方法(用 + ),对象方法需要实例化对象后用对象调用,类方法需要用类名直接调用,而且类方法不能使用类的成员变量,oc类中没有类似java中的静态成员变量的概念!
5. oc对象特有的调用方法的方式是形如[p speakWithWords:@"天气真好!"AndMood:@"怪异的"];样子的消息发送机制,只有类中的方法需要这么写,类外边定义的普通函数不管定义还是调用都和c中的一样。
上面这几条基本上是一般的oc类的编写规律,Person类的例子可以当作以后写一般类的模板参考,不过oc的get/set方法还有许多更好的方法来优化。