IOS | MAC

Objective-C总结----2.如何编写一个类(上)

2016-10-08  本文已影响282人  鋼鉄侠

Objective-C是一门面向对象编程(OOP)语言,如何编写一个类?

Objective-C类基本构成

自定义一个Objective-C类

Snip20161007_4.png Snip20161007_6.png Snip20161007_8.png Snip20161007_9.png Snip20161007_11.png Snip20161007_12.png

为了这个类添加成员变量、成员属性、成员方法

在KNZPerson.h中声明成员变量和成员方法:
<code>
//
// KNZPerson.h
// 自定义类
//
// Created by 李阳 on 2016/10/7.
// Copyright © 2016年 kenzo. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface KNZPerson : NSObject
{
NSString *_name;
int _age;
BOOL _sex;//YES为男,NO为女
}
+(void)speak;
-(void)talk;
@end
</code>

代码解析

在KNZPerson.m中实现KNZPerson.h中声明的所有方法:
<code>
//
// KNZPerson.m
// 自定义类
//
// Created by 李阳 on 2016/10/7.
// Copyright © 2016年 kenzo. All rights reserved.
//
#import "KNZPerson.h"
@implementation KNZPerson
+(void)speak
{
NSLog(@"你好!speak!");
}
-(void)talk
{
NSLog(@"名字:%@,年龄:%d,男的:%hhd",_name,_age,_sex);
}
@end
</code>

已经实现完基本的Person类,这个类有三个成员变量和两个成员方法。现在想使用这个类。

Snip20161007_14.png

- 运行,直接打印“你好!speak!”

这次通过在.h头文件中声明成员变量的方法自定义一个类,这样设计有个弊端,就是将成员变量都公开了,虽然成员变量作用范围默认为protected,但不符合OOP封装性。


Snip20161008_20.png

成员变量作用范围


因此,我们将成员变量在.m文件中声明,并提供访问成员变量的set/get方法,继续改进.

<code>
//
// KNZPerson.m
// 自定义类
//
// Created by 李阳 on 2016/10/7.
// Copyright © 2016年 kenzo. All rights reserved.
//
#import "KNZPerson.h"
@implementation KNZPerson
{
NSString *_name;
int _age;
BOOL _sex;//YES为男,NO为女
}
+(void)speak
{
NSLog(@"你好!speak!");
}
-(void)talk
{
NSLog(@"名字:%@,年龄:%d,男的:%d",_name,_age,_sex);
}
@end
</code>

Snip20161008_21.png

2016-10-08 08:04:44.487069 自定义类[24353:1473367] 名字:kenzo,年龄:20,男的:1
Program ended with exit code: 0

Snip20161008_22.png

2016-10-08 08:08:29.781012 自定义类[24558:1485252] 名字:kenzo,年龄:20,男的:1
2016-10-08 08:08:29.781207 自定义类[24558:1485252] 名字:kenzo,年龄:20,男的:1
Program ended with exit code: 0

-(instancetype)initWithName:(NSString *)name age:(int)age sex:(BOOL)sex;

2016-10-08 08:24:38.128484 自定义类[25391:1536557] 名字:kenzo,年龄:28,男的:1
**2016-10-08 08:24:38.128671 自定义类[25391:1536557] 名字:lucy,年龄:20,男的:0
Program ended with exit code: 0

<code>
2016-10-08 08:39:23.815602 自定义类[26131:1582661] 名字:kenzo,年龄:28,男的:1
2016-10-08 08:39:23.815805 自定义类[26131:1582661] 名字:lucy,年龄:20,男的:0
2016-10-08 08:39:23.815843 自定义类[26131:1582661] person:29 岁,person2:21 岁
Program ended with exit code: 0
</code>

注解

需要为每一个成员变量提供set/get访问方法,但这些重复性工作没有多大意义,苹果公司推出了自动声明属性@property,它会自动生成成员变量和对应的set/get访问方法。下一篇:Objective-C总结----2.如何编写一个类(下),将以自动声明属性方式重构这个KNZPerson类。

上一篇 下一篇

猜你喜欢

热点阅读