IOS学习笔记_ios学习笔记
IOS学习笔记由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“ios学习笔记”。
Objective c学习
1.特殊的空类型 nil,该类型没有名称,空引用(nil)是空类型变量唯一的值,该类型可
以转换为任何引用类型
2.Ios系统中short int 2字节,int 4字节,long int 4字节,longlong 8字节
3.NSLog输出各种类型的字符,支持附加字符
L 输出为长类型的数
M 指定输出数据所占的最小宽度
.n表示输出n位小数
-表示输出的数值左边对齐
4.NSString在双引号前使用@符号,区分c语言的字符串
5.枚举类型自定义 enum{male,female} me you;
6.BOOL类型返回值为YES或者NO
7.OC中并没有提供方法或者属性来访问数组的长度,只有通过sizeof()函数来计算数组的长度:sizeof(数组变量)/sizeof(数组变量[0])
8.自动内存管理的代码要放在 @autoreleasepool{}中
9.预处理 宏定义 #define #undef带参数的宏定义 #define 宏名称(参数列表)字符串
10.条件编译 #ifdef、#ifndef、#else、#endif 或者 #if、#elif、#else、#endif
11.#import可以帮助程序员判断是否有重复导入的情况
12.结构体 struct不允许直接赋值,使用typedef修改结构体名称时允许直接初始化
13.Objective c提供了@private @package @protected和@public等访问控制符来实现封装
14.定义接口部分的语法
@interface MyCla :NSObject
{
Int _count;
Id _data;
NSString* _name;
}
-(id)initWithString:(NSString*)aName;
+(MyCla*)createMyClaWithString:(NSString*)aName;
@end
15.从xcode4开始,objective c建议成员变量以下划线开头
16.方法类型标识:+代表该方法是类方法(就是指静态方法),直接用类名调用即可;—代
表该方法是实例方法,必须用对象才能调用
17.方法声明的语法:
—(void)insertObject:(id)anObject atIndex:(NSUInteger)index
18.只在实现部分(.m文件中)定义的变量或方法只能在实现部分使用,称为被隐藏的成员变
量或方法,无法从外面访问他们。
19.定义类的变量的方法 类名* 变量名
20.创建对象的方法 [[类名 alloc] 初始化方法]
21.可以使用java的new关键字来创建对象 [类名 new]
22.Self关键字的作用:1类内部的方法互相调用 2类似于java的this关键字 3返回当前的类
23.Id类型可以代表所有对象的类型,任意类的对象都可以赋值给id类型的变量
24.形参个数可变的方法,在最后一个形参后增加逗号和三点(,...)
25.为了在程序中获取个数可变的形参,需要使用关键字,va_list、va_start、va_end、var_arg
26.Objective c里支持访问控制,需要添加@public @package @protected @private 关键字
27.Objective c里不支持静态变量 static关键字不能用于修饰成员变量,static修饰的全局
变量只能在当前原文件中访问,为了模拟静态变量,可以再类实现部分定义一个static修饰的全局变量,并提供一个静态方法来暴露该全局变量
28.成员变量的封装使用setter和getter方法,分别为getAbc和Abc
29.在objective c 2.0开始可以自动合成setter和getter方法,需要在类的接口部分添加
@property指令,在类的实现部分添加@synthesize指令
30.Atomic指定合成的存取方法是否为原子操作,当一个线程进入存、取方法的方法体后,其他线程无法进入存取方法,这样就可以避免多线程并发破坏对象的数据完整性。
31.Copy指示符的使用 @property(nonatomic,copy)NSString* name;当被调用时只是复制
了一个副本
32.Getter和setter方法可以为getter方法和setter方法指定自定义方法名:@property(aign,nonatomic,getter=wawa,setter=nana)int price;
33.Readonly指令指示系统只合成getter方法,不合成setter方法,readwrite指令指示系统
需要合成getter方法和setter方法,是系统的默认设置
34.Retain指示系统在定义属性时,该属性原来所引用的对象的引用计数减1,被赋值对象的引用计数加1.ARC机制类似于java的垃圾回收机制,全称为autoreleasepool
35.Objective c支持点语法的访问,前提是该对象包含setter方法
36.KVC(key value coding)允许以字符串的形式间接地操作对象的属性
37.KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则
对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。
38.Objective c中没有构造方法,对象的初始化有对应的init方法,可以在类中重写init方
法也可以自定义任意名称的初始化方法。
39.Objective c中没有多继承的概念
40.Super关键字与java中使用方法类似,可以直接在子类中调用父类被覆盖的实例方法
41.子类接口不允许定义与父类接口部分重名的成员变量,不论父类的成员变量是否是私
有;而在实现部分没有限制
42.在objective c中没有接口类和抽象类的概念
43.Objective c的包装类是为了让c语言的基本类型具有面向对象的特征
44.NSInteger、NSUInteger、CGFLoat并不是包装类
45.NSValue和NSNumber都是包装类,一般用NSNumber较多,包含3类方法:
+numberWithXXX、-initWithXXX、-XXXValue,用这些方法可以将基本类型转换为包装类
46.Description 方法是NSObject类的方法,可以描述当前的类
47.==与isEqual的区别:本质上没有区别,但isEqual方法是NSObject类的实例方法可以
被重写,可以提供自定义的相等标准。与java不同的地方是,objective c中另外有一套isEqualToString方法来判断两个字符串是否相等
48.Objective c中没有提供抽象类的语法支持,但可以用类簇(cluster)来进行模拟
49.类别(category)objective c 允许使用类别为现有的类添加新方法,并且不需要创建子
类,不需要访问原有类的源代码。定义类别时必须使用圆括号来包含类别名类别中通常只定义方法。一般习惯将类别的接口文件定义成“类名+类别名.h”的形式。类别也可以重写原有类的方法,但通常不建议这么做。可以使用子类来重写。
50.可以使用类别来对类进行模块化设计,目的是解决一个类特别大时将不同的实现方法放
在不同的类中。
51.扩展(extension)与类别相似,扩展相当于匿名类别。
52.协议是objective c里的重要知识点,作用类似于接口,用于定义多个类应该遵守的规范,可以使用类别实现非正式协议;也可以直接定义正式的协议,正式的协议不再使用@interface、@implementation关键字而是使用@protocol关键字。Objective c协议的功能基本等同于接口,而接口的实现也等同于遵守协议,遵守协议也可以说成是实现协议。
53.定义的协议可以把协议定义的方法委托给实现协议的类,这样可以让类定义具有更好的通用性,在ios开发中大量依托于委托的概念。
54.使用@try„„@catch„„@finally捕获异常
55.Objective c 也提供了类似java的反射机制,并提供了3中编程方式与运行环境交互:
1.直接通过objective-c的源代码。2通过NSObject类中定义的方法进行动态编程。3.直接调用运行时函数进行动态编程。
56.Ios的内存回收机制有3中:1.手动引用计数和自动释放池 2.自动引用计数 3.自动垃圾
回收。目前只支持前两种回收。Ios4.2之前的只能使用第一种。
57.Xcode5中默认启用了自动引用计数(ARC),因此不必再担心内存管理
58.NSString字符串类,包含字符串的一些通用的方法。
59.NSMutableString是可变字符串,其中NSString类似于java中的String,而
NSMutableString就类似于java中的StringBuilder类
60.日期与时间类NSDate,NSDate输出时可以输出不同语言的格式,需要使用NSLocale
来设置,NSLocale代表一个语言、国际环境
61.日期格式器(NSDateFormatter),作用是完成NSDate与NSString之间的转换
62.日历(NSCalendar)与日期组件(NSDateComponents)类似于java中的Calendar类,可以从日期中分别提取到年、月、日、时、分、秒
63.定时器(NSTimer)
64.对象复制(copy与mutableCopy方法),copy用于返回对象的不可修改的副本,mutableCopy返回对象的可变副本。对副本进行修改不影响原来的对象。
65.NSCopying与NSMutableCopy协议
66.浅复制(shallow copy)与深复制(deep copy)
67.Setter方法可以使用copy指示符,将传入参数的副本赋给程序的实例变量
68.Objective-c的集合,NSArray代表有序、可重复的集合;NSSet代表无序、不可重复的集合;NSDictionary代表具有映射关系的集合,集合里只能保存对象,相当于java中的map集合69.访问NSArray时使用objectAtIndex:index来访问,但在ios5.0以上的系统可以使用下
标来访问,例如array[i],与java中的访问方式相同。
70.Objective-c也支持java中foreach访问,成为快速枚举(for....in)
71.NSMutableArray是NSArray的子类,代表集合元素的可变的集合,增加了一些方法:
add、remove、replace、sort
72.NSArray允许对集合中的所有元素进行整体的KVC编码,有两个方法:setValue:froKey、valueForKey
73.NSArray还对集合中所有元素或部分元素进行KVO编程提供了方法:addObserver:
forKeyPaht:options:context:、removeObserver:forKeyPath:、addObserver:toObjectsAtIndexes:forKeyPath:options:context:、removeObserver:fromObjectsAtIndexes:forKeyPath:
74.NSSet是一个广泛使用的集合,NSSet按Hash算法来存储集合中的元素,具有很好的存取和查找性能。NSSet不允许包含相同的元素,如果把两个相同的元素放在同一个NSSet集合中,则只会保留一个元素。
75.NSMutableSet继承了NSSet,代表了一个集合元素可变的NSSet集合,主要是在NSSet的基础上增加了添加元素、删除元素的方法,并增加了对集合计算交集、并集、差集的方法:addObject、removeObject、removeAllObjects、addObjectsFromArray、unionSet、minusSet、intersectSet、setSet
76.NSCountedSet是NSMutableSet的子类,它为每个元素额外维护一个添加次数的状态。
77.有序集合(NSOrderedSet与NSMutableOrderedSet)既有NSSet集合的特性又包含
NSArray类似的功能。
78.NSDictionary类似于java中的map集合,提供了类方法和实例方法来创建,传入参数
基本一致,类方法以dictionary开始,实例方法以init开头
79.谓词(NSPredicate)用来定义一个逻辑条件,通过该条件可执行搜索或内存中的过滤
操作,可以在集合中使用谓词对集合进行过滤。包含三个子类:NSComparisonPredicate、NSCompoundPredicate和NSExpreion
80.谓词中可以使用占位符参数,类似于数据库中的存储过程。
81.文件管理使用NSFileManager类进行文件的创建、删除、移动和复制。要读取文件的内容需要通过NSFileHandle进行处理;如果要读取网络资源可以通过NSURL进行处理;如只是读取项目内部的资源,许使用NSBundle进行处理。
82.数据缓冲区(NSData和NSMutableData),NSData所包含的方法:bytes、getBytes:
length、getBytes:range、subdataWithRange、writeToFile:atomically、writeToURL:atomically
83.NSFileManager可以访问文件的属性和内容,也可以创建、删除、复制和移动文件,查看目录包含的内容,与java中的文件不同的地方时可以操作url的文件。
84.使用NSPathUtilities.h管理路径,包含了对NSString类的扩展,增加了一些专门用于操
作路径的方法
85.另外NSPathUtiliters还提供了一些常用函数来获取系统的相关属性:NSUserName()、NSFullUserName()、NSHomeDirectory()、NSHomeDirectoryForUser(user)、NSTemporaryDirectory()
86.可以使用ProceInfo获取进行信息
87.使用NSFileHandle处理文件IO
88.使用NSURL访问网络资源,可以通过该类对URL地址进行解析,获取scheme、host、port、path等
89.NSBundle可以处理包含在项目中的资源文件
90.对象归档类似于java语言的序列化操作,就是用某种格式把一个或多个对象保存到指
定文件中,方便以后从文件中恢复他们。使用两个雷(NSKeyedArchiver和
NSKeyedUnarchiver)
91.如果程序要归档、恢复任意自定义类的实例,那么该类应该实现NSCoding协议
92.可以使用NSData完成自定义归档,一次性的收集多个对象,并将这些对象归档到当个
档案文件中。
93.可以使用归档完成对象的深复制。