//面向过程编程 (Procedure Oriented Programming, POP), 以事件为中心, 关心完成事件的详细步骤, 一步一步如何实现
//面向对象编程(Object Oriented Programming, OOP), 以事物为中心, 也就是参数事件的参与者, 设计事物的功能,
//而完成事件只是事物的所有功能中的一个小功能
//类 具有相同特征和相同行为的事物的抽象, 是一个抽象的概念, 在生活中不具体
//对象 是类的实例, 也就是类的具体表现, 是具体的, 生活中的万物都是对象
//如何描述一个类 特征(静态的属性)和行为(动态属性, 动作)
//OC中方法的调用采用消息发送机制 [receiver message]; receiver消息接收者(类或者对象) message消息(方法)
//- 实例方法 + 类方法
/**
* 类的定义分为两部分
1 类的接口部分: 提供外部访问的接口, 相当于使用说明书
2 类的实现部分: 相当于功能的实现
*/
/**
* 类的接口部分写在.h文件中
部分接口的定义
1 以@interface开始, 以@end结束, 只有把类的接口定义内容写在开始和结束之间才有效
2 Person 类名
3 : 冒号表示继承, 表示它由父类
4 NSObject 父类名
*/
@interface Person : NSObject
{
//实例变量必须写在大括号之内, 而且大括号之内只能写实例变量
//对应描述一个类的特征
//实例变量 类似于结构体中的结构体成员
NSString *name;//姓名
NSString *sex;//性别
NSInteger age;//年龄
}
//OC的方法对应描述一个类的行为
/**
* 类的实现部分写在.m文件中
类的实现部分
1 以@implementation开头 @end结束, 实现内容必须写在中间才有效
2 @implementation 后的Person是要实现的类(需要指定是要对哪一个类做实现)
*/
//Method definition for 'getValue:b:c:'not fount
//产生原因:getValue:b:c:方法在.h文件中声明了, 但在.m文件中没有实现
//解决方案:该方法在.m中实现即可
//类的实现就是实现该类的方法
@implementation Person
- (id)initWithName:(NSString *)aName sex:(NSString *)aSex age:(NSInteger)aAge {
//为自己的实例变量赋值
name = aName;
sex = aSex;
age = aAge;
return self;//self 谁调用该方法self就是谁
}
//创建对象分两步
//1 开辟空间
//通过[Person alloc] 在堆区开辟的空间才是真正的对象, 只不过对于指针变量per存储着堆区的地址, 通过它才能访问对象, 所以我们把指针变量per叫做对象(但是真正的对象是堆区空间,per本质上是一个指针变量)
//id可以代表所有的对象类型, 可以用对应类型的对象来接收
// Person *per = [Person alloc];
//2 初始化(赋初值) init方法完成初始化操作 -号方法, 对象调用
// per = [per init];
//通常创建对象操作连起来写