类:是对事物行为和特征的抽象
对象:是类的一个实例 类和对象的概念就是面向对象编程的核心
创建一个实例化:Person *p1 = [[Person alloc] init]; // alloc 在内存上开辟空间 init 对开辟的空间进行初始化操作
alloc 这个方法 是来自于NSObject 这个基类的类方法 指的是开辟空间
init 也是来自于NSobject的方法 给一个初始值
OC里面规定 方法的调用使用[ ] 实际上这是一个发送消息的机制 [reciver(消息的接收者) message(消息名)];
一般情况下我们新建一个类,类名和创建的类文件名保持一致 并且一个文件里面只放一个类
NSObject类是一个抽象类 Foundation框架下,大多数类都继承与NSObject类
类文件包含连个部分 一 类的接口部分 @interface Person :NSObject @end结尾 一般写在.h文件中
二 实现部分 @implementation 为关键字 @end结尾 一般写在.m文件中
接口部分放类的特征和行为的声明 花括号中放实例变量,用来阐述类的特征
修饰实例变量的可见度的关键字
@protected 受保护的实例变量 类内可以使用,类外不可以使用(默认情况下的实例变量用@protected)----也是最常用修饰方式
@public 公共的 类内类外都可以使用 — 用的比较少,因为它违背了面向对象封装的特性
@private 私有的 类内可以使用,类外不能使用,与@protected区别就是它修饰的变量不能被子类继承
{
NSString *_name; // 实例变量 = 类型 + 名字 (一般以下划线开头命名)
NSString *_gender;
NSInteger _age; // NSInteger就是C语言中的long类型的重定义
CGFloat _height; // CGFloat就是double
NSString *_gender;
NSInteger _age; // NSInteger就是C语言中的long类型的重定义
CGFloat _height; // CGFloat就是double
}
- (void)speak; // - 是一个实例方法 ,需要实例去调用(动态方法).
+ (void)eat; // + 表示这是一个类方法,以后要用类去调用(静态方法).
// 写实例变量的setter跟getter方法.
// setter 方法可以给实例变量设置值 getter 方法可以获得实例变量的值
// 给setter 跟getter 方法命名的时候最好setter 方法以set开头 后面跟上咱们要改变的实例变量
- (void)setName: (NSString *)name;
// getter 方法的命名: 返回值类型跟实例变量的返回值类型保持一致 后面跟上实例变量的名字
+ (void)eat; // + 表示这是一个类方法,以后要用类去调用(静态方法).
// 写实例变量的setter跟getter方法.
// setter 方法可以给实例变量设置值 getter 方法可以获得实例变量的值
// 给setter 跟getter 方法命名的时候最好setter 方法以set开头 后面跟上咱们要改变的实例变量
- (void)setName: (NSString *)name;
// getter 方法的命名: 返回值类型跟实例变量的返回值类型保持一致 后面跟上实例变量的名字
- (NSString *)name;
{ @private
NSString *_brand; // 系统内部是使用指针进行操作的,所以字符串类型的需要加 *
NSString *_color;
NSInteger _price; // 非对象类型,不能加*
CGFloat _speed;
}
// @public 共有的雷内和类外都可以使用实例变量
// @protected 受保护的 类内可以使用,类外无法使用实例变量,如果我们要对实例变量进行取值和赋值,我们可以使用 setter 和 getter 方法 子类会继承父类所有的实例变量和方法,子类可以使用这些实例变量
// @private 类内可以使用,类外无法使用.子类无法继承父类的实例变量.----不常用,它不太符合面向对象思想中 继承 的特性
- (void)run;
+ (void)doufeng;
- (void)setBrand:(NSString *)name;
- (NSString *)brand;
- (void)setColor:(NSString *)color;
- (NSString *)color;
- (void)setPrice:(NSInteger)price;
- (NSInteger)price;
- (void)setSpeed:(CGFloat)speed;
- (CGFloat)speed;
// 如果要传多个参数在方法中,需要用 : 分开, : 后面写上参数的类型和参数的名字
- (void)setBrand:(NSString *)brand color: (NSString *)color price: (NSInteger)price speed: (CGFloat)speed;
- (void)makeColor : (NSString *)color makeMoney : (NSInteger)money;
NSString *_brand; // 系统内部是使用指针进行操作的,所以字符串类型的需要加 *
NSString *_color;
NSInteger _price; // 非对象类型,不能加*
CGFloat _speed;
}
// @public 共有的雷内和类外都可以使用实例变量
// @protected 受保护的 类内可以使用,类外无法使用实例变量,如果我们要对实例变量进行取值和赋值,我们可以使用 setter 和 getter 方法 子类会继承父类所有的实例变量和方法,子类可以使用这些实例变量
// @private 类内可以使用,类外无法使用.子类无法继承父类的实例变量.----不常用,它不太符合面向对象思想中 继承 的特性
- (void)run;
+ (void)doufeng;
- (void)setBrand:(NSString *)name;
- (NSString *)brand;
- (void)setColor:(NSString *)color;
- (NSString *)color;
- (void)setPrice:(NSInteger)price;
- (NSInteger)price;
- (void)setSpeed:(CGFloat)speed;
- (CGFloat)speed;
// 如果要传多个参数在方法中,需要用 : 分开, : 后面写上参数的类型和参数的名字
- (void)setBrand:(NSString *)brand color: (NSString *)color price: (NSInteger)price speed: (CGFloat)speed;
- (void)makeColor : (NSString *)color makeMoney : (NSInteger)money;
- (void)changeColor:(NSString *)color addMoney:(NSInteger)money;