黑马程序员——OC学习之类的声明和实现

------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方法还有许多更好的方法来优化。











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值