第一章 定义类
像在C++语言内编程一样,OC中定义类需要
1.1 定义类接口的(.h)头文件,声明属性和方法;
1.1.1 基本语法
.h类声明需要继承一个父类,父类可以是自己定义的,如果没有特别指定继承的父类,则必须继承自NSObject类。
@interface SimpleClass : NSObject
@end
由于没有命名空间概念,你必须给你的类名起个独一无二的名字,比如加上你的公司和你名字前缀,例如:XYZPerson,否则其他人使用你的类时如果类名相同则会收到编译错误,但是NS前缀不要使用,NS前缀是Apple保留前缀,这样也可以理解为什么OC中特有类都是加上NS前缀了。
@interface XYZPerson : NSObject
@end
1.1.2 属性控制
- 设置公有属性可以使用@property语句,
@interface Person : NSObject
@property NSString *firstName;
@property NSString *lastName;
@end
在例子中我们就声明了Person类的两个NSString型的公有属性。
- 当你不希望用户修改属性,用户只可以读属性内容时时可以在@property后增加readonly关键字。
@interface Person : NSObject
@property (readonly) NSString *firstName;
@property (readonly) NSString *lastName;
@end
- 方法声明
语言 | C语言中 | OC中 |
无输入函数 | void SomeFunction(); | - (void)someMethod; |
一输入函数 | void SomeFunction(int i); | - (void)someMethod: (int) i; |
多输入函数 | void SomeFunction(int i,double j); | - (void)someMethod: (int) i secondValue:(double) j; |
OC中
-(void)中的-号标记表明是个实例方法,只能在类创建的实例中调用
+号标记表明是个类方法,可以由类直接调用
上述例子是没有输入参数的方法,如果你想增加输入参数,必须按照OC特有语法编写。
1.1.3 类方法的一个应用——工厂方法
工厂方法:可以分配对象空间和执行初始化操作的一个类方法。
类方法可以在类的接口中声明(.h文件中),可以像其他实例方法一样执行,只是由类来调用,而非实例调用。
1.2 (.m)文件是方法的具体实现。
首先在.m文件中需要导入.h头文件,以便让编译器先读头文件然后再编译实现文件。导入语法是`#import` 类似于C语言中的`#include`,如下例子。
接下来不同于接口声明用`@interface`关键字,而是用`@implementation`关键字。
再下来使用NSLog函数输出字符串。
例子:
XYZPerson.h
@interface XYZPerson : NSObject
- (void)sayHello;
@end
XYZPerson.m
#import "XYZPerson.h"
@implementation XYZPerson
- (void)sayHello {
NSLog(@"Hello, World!");
}
@end
OC语言与C语言有很多相似之处,然而在方法命名上有特有规定
如:-(void)sayhello;
和-(void)sayHello;
含义就不一样,如果方法命名涉及多个单词请遵循camel case规则,即第一个单词首字母小写,后面其他单词首字母均大写,使得代码更加易读,另外还有一些特殊功能,将会在后面章节介绍。
练习
使用Xcode新建一个名为XYZPerson继承自NSObject的OC类
在XYZPerson头文件接口中增加人的姓,名和生日字段,生日是NSDate类型
声明sayHello方法,并且在
.m
文件中实现方法
声明名为person的工厂方法,返回值是id。