Objective-C概述
Objective-C 简称OC 扩充自C语言的面向对象编程语言。
是OS X 和 IOS 的主要编程语言。
发展时间进度:
1980年初发明了OC语言-->1988年NEXT公司使用OC开发-->1996年OC成为苹果主要编程语言。
OC语言的特点:
OC语言是C语言的超集,允许在OC中使用C语言源代码,OC中兼容C和C++语言。
具备完善的面向对象特性。
类库丰富。
面向对象编程:
面向对象编程:OOP(Object Oriented Programming)。
面向对象语言:C++ java C#。
概念:对象、类、封装、继承、多态等等。
面向对象与面向过程的区别:
面向对象和面向过程是两种不同的编程思想,前者以对象为中心,后者以事件为中心。
特点:面向过程分析解决问题步骤,实现函数,依次调用函数;面向对象:分析工程中参与的对象,各个对象的作用,多个对象协作完成任务;
侧重点:面向过程:实现功能; 面向对象:对象的设计;
语言举例:面向过程:C语言 面向对象:OC C++ java等。
面向对象具有良好的可扩展性、可重用性。类和对象是面向对象的核心。定义类,创建对象,使用对象。
OC中类的定义:
面向对象编程中,使用对象完成程序。
开发中先定义类,再创建对象,然后使用对象。
定义类包含两部分:接口部分和实现部分,1、接口部分:对外声明类的特征和行为,.h文件;2、实现部分:对内实现行为,.m文件。
接口部分包含:类名、父类名、实例变量、方法等。
实现部分:实现类的行为。
类是对象的抽象,对象是类的体现。
创建对象分两部分:分配内存空间和初始化,初始化即为类的对象设置初始值。
实例变量的三种可见度:
@public 公有的 作用域是所有
@protected 受保护的 默认的 作用域在本类和所有子类
@private 私有的 作用域只在本类 属性生成的实例变量是私有的
OC中命名规则:
类命名规则:首字母大写的驼峰法命名规则;
方法命名规则:首字母小写的驼峰法命名规则;
对象命名规则:跟方法命名规则相同 。
id和instancetype的比较:
1、相同点:这两个类型都表示泛型类型,表示的是对象类型;
2、不同点:id在编译期不确定它的类型,instacetype在编译期就已经知道它的类型了;
id s=[[Person alloc]init] 只有到了运行期才把id判定为Person类型;
3、id既可以作为返回值类型使用,也可以作为参数类型使用;instancetype只能作为返回值类型使用,不能作为参数类型使用。
init在java中叫构造器方法,在OC中叫初始化方法。
第一天课堂内容笔记 lessonOC01day:
Person.h:
#import <Foundation/Foundation.h>
//interface:接口 .h文件是类的声明文件,也叫接口文件
//类的声明以@interface开头,以@end结束
//Person是我们自己的定义的类的名字
//:表示继承关系
//NSObject 是父类,NSObject是OC中根类,是所有类的父类,也是最大的一个类。OC中其他类都直接或者间接的继承NSObject类。
@interface Person : NSObject{
//父类后加一个大括号,大括号就是声明类的特征的地方,也叫做类的实例变量。其他语言叫成员变量。
//OC中有一个类专门表示字符串,它就是:NSString类
//OC中除了基本数据类型,其他所有都是指针类型。
@public //公共的,默认是protected,私有是provate
NSString *_name; //声明名字,XCODE4.0之前声明name前需要加_(_name);
int _age; //除了基本数据类型外,其他需要用指针类型
}
//***方法的声明在大括号后,end前***
-(void)sayHi;
//end 结束
@end
Person.m:
#import "Person.h"
//.m文件是类的实现文件(苹果不开源就是我们看不到.m文件,只能看到.h文件)
//在.m中声明的方法必须实现
@implementation Person
//id表示泛型,(泛型:除了基本数据类型之外,他能表示所有对象类型)
//OC中有返回值,同样用return;
-(id)init{ //子类重写父类的方法可以不对这个方法再次声明。
//OC中 @"" 才表示一个字符串
_name=@"李四";
_age=30;
//self表示当前类的对象。当前对象是正在调用init方法的对象。
return self;
}
-(void)sayHi{
// self->_name=@"王五";
NSLog(@"%@ say hello",_name);//@表示对象,对对象进行站位
}
@end
Audi.h
#import <Foundation/Foundation.h>
@interface Audi : NSObject{
NSString *logo;//标志
NSString *color;//颜色
float price;//价格
}
-(void)run;
@end
//一个文件可以创建很多类,文件跟类没有关系
@interface Phone : NSObject{
NSString *_brand;
NSString *_os;
NSString *_color;
float _price;
}
-(void)callSomeOne;
-(void)sentMessage;
@end
Audi.m:
#import "Audi.h"
@implementation Audi
-(void)run{
NSLog(@"audi can fly");
}
@end
@implementation Phone
-(void)callSomeOne{
NSLog(@"打电话...");
}
-(void)sentMessage{
NSLog(@"发信息...");
}
@end
main.m
#import <Foundation/Foundation.h>
#import "Person.h" //导入Person类
#import "Audi.h" //导入Audi类
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
//OC里面开辟内存的方法就是alloc()
//alloc的功能在堆区开辟内存,然后将首地址传给栈区的P
//[]在OC中,用来调用方法,在方法调用时分两个部分,第一部分是类名或实例变量名;第二部分就是方法名
//方法前有+表示这个方法是一个类方法,又叫静态方法,需要用类的名字来调用方法;
//方法前有-表示这是一个实例方法,又叫动态方法,需要用实例变量来调用
//创建一个Person类在栈区声明了一个实例变量p;Person类名调用了分配内存的方法alloc,在堆区开辟了一块内存,并将内存首地址返回存放在实例变量p中。
Person *p = [Person alloc];
//init方法是初始化方法;他的功能是给实例变量赋初始值;并且将他初始化的内存首地址进行返回。
p = [p init];
[p sayHi];
//init 合起来的写法(创建实例变量,并且初始化),alloc相当于买了一部手机,init相当于给手机初始化,alloc必须要由init,alloc只是开辟空间,init就是给实例变量设置值。系统默认init方式是清空内存(清零)。
Person *p1=[[Person alloc]init];
//_name设置为public时可以在这里修改,否则报错。
p1->_name=@"赵六";
p1->_age=18;
[p1 sayHi];
/*练习4.1 定义奥迪汽车类。声明实例变量和方法,实现方法*/
Audi *Q5=[[Audi alloc]init];
[Q5 run];
/*练习4.2 定义手机类。声明实例变量和方法,实现方法*/
Phone *lenove=[[Phone alloc]init];
[lenove callSomeOne];
[lenove sentMessage];
}
return 0;
}
/*第一天课程内容总结:
1、区分类和对象
类是具有相同特征和行为的一个抽象
对象是类生成的一个实例变量
2、类的定义
类的声明在.h文件里,类的实现在.m文件里。
声明在@interface..@end之间
实现在@implementation...@end之间
3、对象(实例)的创建
第一步有alloc分配内存,第二步给对象初始化,
如:Audi *Q5=[[Audi alloc]init];
4、使用类里面的方法
看方法的标识,然后调用
+表示是类的方法,由类直接调用
-表示的是对象的方法,由对象调用
5、操作类里面的实例变量
公有的:@public
保护的:@protected 系统默认的
私有的:@private
*/