第一部分:
面向对象编程:OOP(Object Oriented Programming)
面向对象语言:C++, Java, C#
概念:对象、类、封装、继承、多态等等
面向过程:分析解决问题的步骤,实现函数,一次调用函数(侧重点:实现功能)
面向对象:分析某个问题需要参与的对象,各个对象的作用,多个对象协作完成任务(侧重点:对象的设计(具有哪些功能))
类:具有相同特征和行为的事物的抽象
对象是类的实例,类是对象的类型
OC中类的定义包括两个部分:
1、接口部分:对外声明类的特征和行为。@interface...@end
作用:声明类的实例变量和方法,即特征和行为。
2、实现部分:对内实现行为
作用:实现方法,即实现类的行为。
成员变量的可见度为什么不使用@publice?
1、使用@public关键字,暴露了类内部的细节
2、不符合面向对象语言的三大特性之一的封装
#import “”导⼊入⾃自定义类,#import <>导⼊入类库中的头⽂文件。
@class:告诉编译器@class后的字符串作为类名使⽤用,并未导⼊入类的接⼝口内容
OC中的继承
1、OC中只允许单继承
2、没有父类的类称为根类,OC中的根类是NSObject。
3、继承的内容:所有实例变量和方法。
4、若子类不满意父类方法的实现,可以重写父类的方法。
第二部分:API
使用苹果帮助文档
苹果每次IOS版本的升级,都会添加或更新大量的API,并提供相应的参考文档。
开发者很难记忆所有的API。·
学会使用苹果帮助文档是开发者的一项技能。
Xcode - >Help - >Documentation and API Reference
字符串类:
Foundation框架:是Cocoa编程,iOS编程的基础框架,包括:字符串、集合、日期、时间等基础类。
字符串、数组、字典都属于Foundation框架。
Block进行typedef
typedef int (^BlockType)(int x, int y)
原类型:int (^)(int x, int y)
新类型:BlockType
NSDate的使用:
NSDate是Cocoa中用于处理日期和时间的基础类,封装了某一给定的时刻(含日期, 时间, 时区)。
使用+date方法获取当前时间
例如:NSDate *nowDate = [NSDate date];
NSLog(@“%@”, nowDate);无论你是哪个时区的时间,打印时总是打印对应的0时区时间。
NSTimeinterval:用以表示以秒为单位的时间间隔
NSDateFormatter的使用:
NSDateFormatter是iOS中得日期格式类,功能是实现NSString和NSDate的互转。
指定日期格式:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@“yyyy-MM-dd HH:mm:ss”];
第三部分:类的扩展
Category:
作用: 1、给类里面的方法分类、把一个类功能写在不同的源文件中
2、多人协同开发时、
3、在不修改类的源文件,从外部增加一个类的方法
Extension:
作用:帮助管理我们的私有方法用的,进一步强化封装的概念,把外部不需要的方法,写在延展里面。
Protocol:(解耦合)
接受协议的对象实现协议中定义的方法(相当于任务列表)
Protocol和delegate通常联合使用,是iOS开发中特别常用的。
实现协议:在父类后面写上协议名(解耦合非常重要的技巧)
修改类的五种方法:直接修改、Category、Inheritance、Protocol、Extension
第四部分:属性
Attribute:属性的属性
第一类:读写性控制(readonly、readwrite、setter、getter)
readonly:告诉编译器,只声明getter方法(无setter方法)
readwrite:告诉编译器,既声明setter又声明getter方法
(readwrite是读写性控制的默认设置)
第二类:原子性控制(nonatomic、atomic)
atomic:setter、getter方法在多线程访问下是绝对安全的,即setter、getter内部做了多线程访问处理。原子性控制的默认设置是atomic
nonatomic:setter、getter方法内部不会做多线程访问处理,仅仅是普通的setter、getter方法
注意:在程序开发的过程中,setter、getter处处都在用,如果使用atomic,需要不断的对setter、getter加锁解锁以保证线程访问安全,会很占用系统资源,降低系统性能。
通常设置为:nonatomic,某些属性需要线程安全的时候,才定义为atomic
第三类:语义设置(assign、retain、copy)
assign:setter、getter内部实现是直接赋值
retain:setter、getter的内部实现会做内存优化
copy:setter、getter的内部实现也会做内存优化
如果属性是非对象类型(int、float等)属性的语义设置使用assign。
如果属性是对象类型(NSString、NSArray等)属性的语义设置为retain。
如果属性是对象类型并且想得到参数的copy,使用copy关键字
第五部分:
KVC:(Key—Value—Coding)键值编码,是一种间接访问实例变量的方法
key:键,用于标识实例变量
value:实例变量对应的值
KVC是一种间接访问实例变量的方法
collection的内存管理:
collection就是NSArray,NSDictionary,NSSet...等容器类
collection会自主管理自己内部的元素:
加入collection中得对象会被retain;
移除除collection的对象会被release;
collection被释放会对内部所有对象release
第六部分:
多态:(面向对象的三大特性之一)
不同类型对象在响应同一个方法时的不同实现。
父类指针可以指向子类对象。
多态的特点:
1、父类指针可以指向不同的子类对象
2、允许在多个类中定义同一个消息接口
3、可以屏蔽不同子类对象之间的差异,写出通用代码
4、适应需求的不断变化