OC——总结(总体)(有点low)

第一部分:

面向对象编程: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、适应需求的不断变化


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值