OC学习阶段性小结

/*一、1.OC是一门面向对象的语言。扩展了标准C语言的类与接口。OC能完成的操作:定义新的类、类的实例和方法、方法调用(成为发消息)、属性声明(以及通过他们自动合成存取方法)、静态和动态类型化、块(block)已封装的 可在任何时候执行的多段代码、基本语言的扩展,例如协议和类别。

2.面向对象编程也叫做面向接口编程,简称:OOP(Object Oriented Programming)。

3.类和对象是面向对象的核心。

4.类:具有相同特征和行为的事物的抽象。

5.面向对象的三大特征:封装、继承、多态

二、类 1.OC中的超类(根类)只有一个:NSObject,类是由接口和实现两部分构成的,类的接口和实现可以同时放在在.h文件中,一对.h和.m文件可以定义并实现多个类。类名与文件名无关。

2.方法分为类方法(+)和实例方法(-)。类方法只能通过类发送消息,实例方法只能通过对象发送消息。<注>什么是方法名?(参数形容词+:::)称为方法名。

3.实例变量的可见度:@public,@protected,@private

4.继承 上层:父类,下层:子类(subClass)。继承是单向的,不能相互继承。子类能继承父类全部的特征(非@private)和行为

三、1.#include 拷贝,出现一次,拷贝一次.h文件,会重复导入,会造成循环引入。

2.#import 拷贝,xcode进行了优化,不会重复导入,但会造成循环引入。

3.#class 拷贝,告诉编译器@class后的字符串作为类名使用,并未导入接口内容,可以避免嵌套循环导入。

四、API文档 快速打开方法:option+左键(点击reference超链接进入帮助文档) /command+左键(头文件)

基本信息:

1.inherits from 继承自

2.Conforms to 遵循什么协议

3.Framework 属于哪个框架

4.Availability 什么时候可?的

5.Declared in 声明在什么头文件里

6.Related documents 相关?文档

7.Sample code ?示例代码

五、foundation框架是Cocoa编程,iOS编程的基础框架包括:字符串、集合、日期和时间等基础类。

1.字符串类:基本方法见书本总结。NSNumber用于把基本数据类型包装成字符串。

2.集合类:集合包括数组(NSArray),字典(NSDictionary)、集合(NSSet),集合所存元素为对象,不能是基本数据类型,集合皆可以直接打印,但一般只在调试的时候直接打印,实际应用中使用for-in循环打印.

//NSString *string = @"lanou";

//string = [string capitalizedString];

//NSLog(@"%@",string);

//NSArray *array = [NSArray arrayWithObjects:string,@"xuesheng",nil];

//NSSet *set = [NSSet setWithObjects:[NSNumber numberWithDouble:3.21f],string,nil];

//NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:array,@"1",set,@"2" ,nil];

//NSLog(@"%@",dict);

{//字典打印形式

1 =     (   //数组打印形式

Lanou,               //数组元素1

xuesheng             //数组元素1

);

2 = "{(\n    Lanou,\n    3.210000038146973\n)}";    //集合打印形式

}

2.1数组 数组有序,可以按照下标索引对应的数组元素,遍历数组使用for-in循环。

2.2字典 字典无序 存放的是key-value键值对(条目/entry),key值和value值都只能是对象,其中,key值不可相同,若初始化时相同,则只存储靠前的的key-value键值对,若初始化后添加,则新的key-value对会替换掉前面的key-value对。

2.3集合 集合无序,不能有重复的元素,使用集合可以过滤掉一组对象中重复的对象。NSCountedSet是NSMutableSet的子类,能记录元素的重复次数,在set的基础上添加了技术功能。

2.5数组排序 默认使用升序排序。

六、Block:块语法,本质上是匿名函数(没有名称的函数)标准形式:int (^名)(int) = int ^ (int a){return 2*a;};

七、字面量(语法糖)是一种简易表示值的方法

八、NSDate和NSDateFormatter  通过date获取的当前时间永远是0时区的时间,NSTimeInterval(即double类型)用以表示以秒为单位的时间间隔。NSDateFormatter是iOS中的日期格式类,功能是实现NSString和NSDate的互转。

标准格式:

NSDateFormatter * formatter = [[NSDateFormatter alloc] init];

[formatter setAMSymbol:@"AM"];

[formatter setPMSymbol:@"PM"];

[formatter setDateFormat:@"YY-MM-dd hh:mm:ss aaa"];

NSString * currentDate = [formatter stringFromDate:[NSDate date]];

九、类的扩展

1.Category也叫分类或类目,主要作用是为没有源代码的类添加方法,通过Category添加的方法会成为原类的一部分,从而达到扩展一个类的功能,等同于该类原有的方法。

2.Extension的主要作用是管理类的“私有”方法。

格式:

#import "Person.h"

@interface Person ()//注意:该“()”不可删除

-(void)insideMethod;

@end

@implementation Person

3.Protocol(协议)协议是一套标准(一堆方法的声明),只有.h文件。接受协议的对象实现协议中定义的方法。

Protocol的核心使用场景是实现delegate(代理)设计模式。

十、1.属性 @property   @synthesize  属性的属性(attribute)包括读写属性(readonly、readwrite)、原子属性(atomic、nontomic)和语义属性(assign、retain、copy),其中assign多用于修饰基本数据类型,retain(赋值时做内存优化) 适用于对象类型 、copy (复制一个副本,需要实现copy协议的类才可以使用)适用于特殊的对象类型(比如:字符串)。

copy方法的实现:

Person.h?文件

@interface Person : NSObject<NSCopying>       //声明部分

Person.m?件

@implementation Person

- (id)copyWithZone:(NSZone *)zone{                    //实现部分

Person *p = [[Person allocWithZone:zone]init];
                 p.age = self.age;

p.name = self.name;

return p;

}

2.协议语义属性是assign,block的语义属性是copy

3.注意不同语义属性修饰下setter和getter方法的写法。

十一、点语法 在MRC环境下,点语法会调用set或者get方法,而_instance不会调用,因此,在get 和 set方法中不能使用点语法实现,而要使用_instance实现,否则会出现嵌套死循环。在初始化时,必须使用点语法实现,负责内存释放时会出现野指针。

十二、KVC(Key-Value-Coding)键值编码,是一种间接访问实例变量的方法。当key值不存在时,会执行setValue:forUnderfineKey:系统默认是抛出一个异常。重写setValue:forUndefinedKey:和valueForUndefinedKey:可以防止Key写错造成的程序崩溃。例如:

-(void)setValue:(id)value forUndefinedKey:(NSString *)key

{

NSLog(@"没有这个%@",key);

}

十三、1.OC内存管理的方式:垃圾回收、ARC、MRC,其中,iOS中使用以引用计数机制为基础的ARC和MRC内存管理方式。OC采?用引用计数机制管理内存,当一个新的引?用指向对象时,引用计数器就递增,当去掉一个引用时,引用计数就递减。当引用计数到零时,该对象就将释放占有的资源。

2.使用MRC管理内存的原则,自己使用alloc、retain、copy导致的引用计数+1,都要使用release或者Autorelease-1,而系统自带的方法导致的引用计数+1,不需要release,当一个对象的引用计数减到0时,编译器会自动调用dealloc方法,释放该对象。

3.使用autoreleasepool时,pool会把接收到的autorelease对象以压栈的方式给保存起来,[pool release];时,pool会向之前保存的对象逐一发送release消息。

十四、MRC内存管理方式下dealloc方法,永远不要手动调用dealloc

十五、collection的内存管理:collection会自主管理自己内部的元素,加入collection中的对象会被retain,移除collection的对象会被release,collection被释放会对内部所有的对象release

*/

时间: 2024-09-29 21:14:15

OC学习阶段性小结的相关文章

UI学习阶段性小结

#pragma mark  UI阶段性小结 //    UI(User Interface)用户界面 //    iOS App = 各种各样的UI控件 + 业务逻辑和算法 #pragma mark  一.UIView.UILabel.UIWindow #pragma mark  1.frame是一个结构体,包含2个部分的内容:origin(x和y)和Size(width和height) #pragma mark  2.bounds(边界)是view的重要属性 //    用于定义自己的边界,同

Ofbiz项目学习——阶段性小结——服务返回结果

一.返回成功 1.在.DispatcherReturnDemoService类中编写服务[returnSuccess],内容如下: /** * 返回成功结果 * @param dctx * @param context * @return */ public static Map<String,Object> returnSuccess( DispatchContext dctx, Map<String,Object> context ){ //填写服务执行的代码 //......

Ofbiz项目学习——阶段性小结——删除数据

一.根据主键进行删除 /** * 按主键进行删除 * @param dctx * @param context * @return */ public static Map<String,Object> deleteUomByPrimaryKey( DispatchContext dctx, Map<String,Object> context){ //取得实体引擎实例 GenericDelegator delegator = dctx.getDelegator(); //TODO

OC学习篇之---总结和学习目录

今天终于把OC的基础知识学习完了,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.下面就是这次学习OC的目录教程,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请OC老鸟来喷~~ 1.OC学习篇之---概述 2.OC学习篇之---第一个程序HelloWorld 3.OC学习篇之---类的定义 4.OC学习篇之---类的初始化方法和点语法的使用 5.OC学习篇之---类的三大特性(封装,继承,多态) 6.OC学习篇之[email protected]关键

IOS开发-OC学习-常用功能代码片段整理

IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是在做与URL有关的功能时,需要在Info.plist中添加一段代码进而实现让网址完成从Http到Https的转换,以及其他的一些功能. 在从一个新手到逐渐学会各种功能.代码.控件.方法如何使用的过程中,也在逐渐积累一些知识,但是一次总不会把这些东西都深刻记住并完全理解.所以在这儿记录下这些东西,用来

OC学习篇之---单例模式

在之前的一片文章中介绍了对象的拷贝相关知识:http://blog.csdn.net/jiangwei0910410003/article/details/41926531,今天我们来看一下OC中的单例模式,单例模式在设计模式中用的可能是最多的一种了,而且也是最简单的一种 实现单例模式有三个条件 1.类的构造方法是私有的 2.类提供一个类方法用于产生对象 3.类中有一个私有的自己对象 针对于这三个条件,OC中都是可以做到的 1.类的构造方法是私有的 我们只需要重写allocWithZone方法,

黑马程序员-OC学习笔记之Foundation框架NSNumber、NSValue和NSDate

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.NSNumber 前几篇笔记中,小桥复习了Foundatio框架中的几个类,这三个是OC学习的尾声了. 小桥已经复习过OC数组类NSArray,也说过它只能存放OC的对象,对于基本的数据类型确无能为力,但是实际编程中经常要把基本的数据如int.float,结构体存放的OC数组中,怎么办?这里的NSNumber就有用了,它能够把基本数据类型包装成OC对象.

黑马程序员-OC学习笔记之block

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9426    Accepted Submission(s): 4151 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做par

(转载)OC学习篇之[email&#160;protected]关键字的作用以及#include和#import的区别

前一篇文章说到了OC中类的三大特性,今天我们来看一下在学习OC的过程中遇到的一些问题,该如何去解决,首先来看一下我们之前遗留的一个问题: 一.#import和#include的区别 当我们在代码中使用两次#include的时候会报错:因为#include相当于拷贝头文件中的声明内容,所以会报重复定义的错误 但是使用两次#import的话,不会报错,所以他可以解决重复导入的问题,他会做一次判断,如果已经导入一次就不导入了 二.关键字@class的作用 在来看一下OC中的关键字@class的作用,在