第一讲 初始类和对象
c语言的超集,允许在oc中使用c语言源代码。编译器兼容c语言程序
具备完善的面向对象特性
包含一个运行时系统
类库丰富
面向对象编程 oop
面向对象语言:c++ java c#
概念:对象、类、封装、继承、多态等
面向过程:分析解决问题的步骤,实现函数,依次调用
面向对象:分析问题组成的对象,协调对象间的联系和通信,解决问题
面向对象设计具有良好的可扩展性、可重用性
类和对象是面向对象的核心
定义类,创建对象,使用对象
具有相同特征和行为的事物的抽象
对象是类的 实例
类是对象的类型
面向对象编程中使用对象完成程序
开发中:先定义类,在创建对象,然后使用对象
定义类包含两部分:接口部分和实现部分, 分开写
1.接口部分:对外声明类的特征和行为
2.实现部分:对内实现行为
接口部分
接口部分标志:@interface...@end
作用:声明类的实例变量和⽅方法,即特征和⾏行为。
包含内容:类名、父类名、实例变量、方法等
#import <Foundation/Foundation.h> @interface Student : NSObject
{
@public
NSString *_name;
NSString *_sex;
NSInteger _num; }
- (void)study;//学习
- (void)sleep;//睡觉
- (void)read;//读书 @end
实现部分
实现部分标志:@implementation...@end
作用:实现方法 即实现类的行为
#import "Student.h" @implementation Student
- (id)init
{
_name = @"zhangsan";
return self;
}
- (void)study;//学习
{
NSLog(@"%@ go to study",_name);
}
- (void)sleep;//睡觉
{
NSLog(@"%@ ,it's time to sleep",_name);
}
- (void)read;//读书
{
NSLog(@"you must read now");
}
@end
类和文件
类:@interface...@end @implementation...@end
⽂文件:.h称为接⼝口⽂文件或头⽂文件,.m称为实现⽂文件。默认设 置如下:
1. 使⽤用类名命名⽂文件。
2. .h⽂文件管理类的接⼝口部分;.m⽂文件管理类的实现部分
⽂文件和类本质没有关系,为了⽅方便管理、实现封装特性
创建对象
创建对象分两步:分配内存空间和初始化。
分配内存空间:根据类中声明的实例变量为对象分配内存,
将所有实例变量置为默认值0,并返回⾸首地址。 初始化:为对象的实例变量设置初始值
分配内存空间:Person * p = [Person alloc];
初始化:p = [p init]; 通常这两部操作需要连写:
Person * p = [[Person alloc] init];
+ (id)alloc; +表⽰示这个⽅方法属于类,只能类执⾏行。id返回值 类型,表⽰示任意类型的对象,即创建好的对象。
- (id)init; -表⽰示这个⽅方法属于对象,只能对象执⾏行。id返回值 类型,表⽰示初始化完成的对象。
初始化
使用对象
指针存储对象的⾸首地址,代指对象。OC中使⽤用指针代指对 象,进⾏行操作。
Person * p = [Person alloc]; 先执⾏行“=”右侧
1. [Person alloc]返回值是对象的⾸首地址,即对象。
2. p是跟对象同类型的指针变量,存储对象⾸首地址,代指对象
int main(int argc, const char * argv[])
{
Student *zhangsan = [[Student alloc] init];
[zhangsan sleep];
操作实例变量
实例变量在初始化只做少量设置,后期还需要进⾏行设置。
实例变量区分可⻅见度,共三种。这节课使⽤用public @public:实例变量访问修饰符号(公有)。
@interface Lesson : NSObject
{
//@public//公有的,用public 修饰的变量。可以在任何文件访问
// @protected//受保护的,仅能在自己类和子类里访问
@private//私有的,仅能在自己类里访问
NSString *_name;//实例变量前加下划线(不成文规定)区别其他变量
NSString *_sex; //string 字符串
NSInteger _age;
语法细节,注意事项
l 成员变量不能在{}中进行初始化、不能被直接拿出去访问
l 方法不能当做函数一样调用
l 成员变量\方法不能用static等关键字修饰,别跟C语言混在一起(暂时忽略)
l 类的实现可用写在main函数的后面,主要在声明后面就行了
l C函数不能访问OC对象的成员
l 方法只有声明,没有实现(经典错误)
l 方法没有声明,只有实现(编译器警告,但是能调用,OC的弱语法)
l 编译的时候:访问没有的成员变量直接报错,访问没有的方法,只是警告