在学习ios开发前,最好还是先学习下objective-c,可以做到事半功倍的效果。
1.打印使用nslog()函数打印,此打印包括了时间戳,日起戳和自动附加换行符。
2.boolean型(BOOL),保存真值(YES)和假值(NO)的变量。在函数中直接使用bool做判断。
3.oop的关键字:间接 indirection。基本变量就是一种实际应用。
4.id类型。它代表identifier标识符。实际上是一个指针,指向其中的某个结构。
5.objective-c中的@interface部分:为新类定义的接口
6.类是一种结构,它表示对象的类型。
7。对象是一种结构,它包含值和指向其类的隐藏指针。
8。实例是对象的另一种称呼。
9。消息是对象可以执行的操作,用于通知对象去做什么。
10。方法是响应消息而运行的代码。
11。接口是对象的类应该提供的特性的描述。
12。实现是接口正常工作的代码。
13。implementation部分,接口interface的实现。可以实现在interface未定义的方法,看成是私有方法。
14。实例化对象,需要分配内存,然后这些内存被初始化并保存一些有用的默认值。
15。继承 语法: @interface Circle: NSObject 只能从一个类继承。
16。超类,你所继承的类。
17。父类,超类的一种表达形式。
18。子类,实施继承的类。
19。孩子类,子类的一种表达形式。
20。super关键字,调用父类的方法。
21。复合,对象间的组合,将多个组件组合在一起配合使用。
22。存取方法,用来读取或改变对象特定属性的方法。setter方法,getter方法。不要用get当作存取方法的前缀。
23。在“X是一个Y”,使用继承“is a”。“X有一个Y”,就可以使用复合“has a”。
24。依赖关系,是两个实体之间的一种关系。
25。@class关键字,告诉编译器这是一个类,所以我只需要通过指针来引用它。
26。xcode编程时,任何时候都可以按Esc键,让Xcode打开这个包含所有可能代码的自动完成列表。
27。名称旁边的彩色方框表示这个符号的类型:E表示枚举类型,f表示函数,#表示#define指令,m表示方法,C表示类。
28。结构体NSRange,表示相关事物的范围。location 字段存放该范围的起始位置,length字段则是该范围内所包含元素的个数。设置值,NSMakeRange(17, 4).
29.NSPoint代表的是笛卡尔平面中的一个点(x,y).NSSize用来存储长度和宽度。NSRect矩形,包含NSPoint和NSSize。使用快捷函数创建NSMakePoint(),NSMakeSize(),NSMakeRect().
30.NSString创建函数,stringWithFormat: 此方法是一个类方法(及工厂方法)。
31。NSColor可以方法全局变量,如[NSColor blueColor].
32.NSString的length方法。返回字符串中的字符个数。
33。NSString的isEqualToString:方法,用来比较接收方和当前参数传递来的字符串,返回一个BOOL。
34。NSString的compare:方法,将接收对象和传递来的字符串逐个字符地进行比较,返回一个NSComparisonResult(一个enum)。
35。NSString的compare:options:不区分大小比较。options是一个掩码,常用选项有NSCaseInsensitiveSearch不区分大小写。NSLiteralSearch完全比较,区分大小写。NSNumericSearch比较字符串的字符个数。
36。NSString的hasPrefix:是否以另一个字符串开头。
37。NSString的hasSuffix:是否以另一个字符串结尾。
38。NSString的rangOfString:传递的参数是要查找的字符串。返回NSRange struct来告诉匹配的部分在哪,匹配几个字符个数。range。start为6,range。length为7。如果没有找到那么range.start为NSNotFound。
39。NSMutableString一个可变的字符串。类方法stringWithCapacity:初始化一个一定大小的空间。使用appendString:和appendFormat:来附加新字符串。使用deleteCharactersInRange:,删除字符串中的字符。
40。NSArray用来存储对象的有序列表。两个限制:(1)不能存储C语言中的基本数据类型。(2)不能保存nil类型。-componentsSeparatedByString:来切分NSArray。componentsJoinedByString:来合并NSArray中的元素。
41.可变数组NSMutableNSarray.通过arrayWithCapacity来创建新的可变数组。使用addObject:在数组末尾添加对象。-(void)removeObjectAtIndex:(unsigned)index;方法来删除指定的元素。
42.NSEnmuerator,向数组申请枚举器。-(NSEnumerator *)objectEnumerator.使用reverseObjectEnumerator和nextObject来获取前一个和后一个对象。
43.快速枚举,for (NSString *stirng in array);
44.NSDictonary字典,也称为散列表或关联数组。搜索的速度非常快。
45.NSMutableDictonary可变字典。用类方法dictionaryWithobjectsAndKeys:来创建字典。使用-(id)objectForKey:(id)aKey来获取字典中的值(没有找到返回nil)。也可以用+(id)dictionaryWithCapacity;(unsigned int)numltems;来创建可变字典。使用-(void)setObject:forkey方法来添加字典元素。使用removeObjectForKey:方法来删除一个关键字。
46.可以使用NSString,NSarray或NSDictonary类,但是不要去创建他们的子类。
47.NSNumber类包装基本数据类型。创建+(NSNumber *) numberWithChar: (char)value;(这个动作叫装箱) 重新获取-(char)charValue;(这个动作叫取消装箱) objective-C语言不支持自动装箱。
48.NSValue创建 +(NSValue *)valueWithBytes: (const void *)value objCType:(const char *)type; 可以使用@encode编辑器指令根据数据类型的名称生成合适的字符串。 在使用getValue:方法来提取数值。 struct型数据转换为NSValue的便捷方法,+(NSValue *)valueWithPoint:(NSPoint) point; -(NSPoint)pointValue;
49.NSNull类,表示什么都没有。只有一个类方法+(NSNull *)null;
50.内存管理,每个有一个与之相关联的整数,称作引用计数器。当某对象访问一个对象时,将该对象的保留计数器减1。当使用alloc,new或copy消息创建一个对象时,对象的保留计数器被设置为1。增加对象的保留计数器值,可以给对象发送一条retain消息。要减少对象的保留计数器值,可以给对象发送一条release消息。当计数器为0即被销毁时,obctive-c自动向对象发送一条dealloc消息。
51。使用retainCount消息获取保留计数器的当前值。
52.如果一个对象具有指向其他对象的实例变量,则称该对象拥有这些对象。
53。autorelease pool自动释放池,存放实体的池,这些实体可能是对象,能够被自动释放。 -(id)autorelease;就是把对象放入自动释放池。[someObject autorelease]; -drain方法,清空自动释放池而不销毁它。
54.内存管理规则:(1)当使用new,alloc或copy方法创建一个对象时,该对象的保留计数器为1。当不再使用时,需要发送一条release或autorelease消息。(2)如果通过其他方法获取一个对象时,则不需要清理它。(3)如果保留某个对象,最终需要释放或自动释放对象。必须保持retain对象和release方法的使用次数相等。
55。[NSMutableArray arrayWithCapacity:17];[NSColor blueColor]方法不属于alloc,new,copy这3个方法中的一个。
56。开发iphone软件最好不要使用垃圾回收机制,因为垃圾回收机制非常耗时,需要检查成千上万的对象,而且必须停止程序的运行。非常的影响性能,像iphone嵌入式设备,cpu处理慢,内存小。最好不要使用垃圾回收机制。
57。alloc分配的内存,都初始化为0。BOOL初始化为NO,int初始化为0,float初始化为0.0,指针初始化为nil。
58。init方法,使用if (self = [super init])来判断初始化成功。
59。指定初始化函数,通常接受参数最多的初始化函数最终成为指定初始化函数。(如果构造了一个初始化函数,则一定要在你自己的指定初始化函数中调用超类的指定初始化函数)
60。@property 一种新的编译器功能,表示声明了一个新对象的属性。 @synthesize,表示创建该属性的访问期。
61。点表达式(.),出现在左边调用属性名称set的方法。出现在右边调用getter方法。
62。category类别,利用objective-c的动态运行时分配机制,为现有的类添加新方法。 (创建的类别没有实例变量部分)
63。类别的局限性,1。无法向类中添加新的实例变量。2。名称冲突,即类别中的方法与现有的方法重名。类别的方法有更高的优先级,完全取代初始化方法。
64。delegate委托,是一种对象,另一个类的对象会要求委托对象执行它的操作。
65。run循环是一种Cocoa构造,它一直处于阻塞状态(即不执行任何处理),直到某些有趣的事情反生为止。
66。委托强调类别的另一种应用,被发送给委托对象的方法可以声明为一个NSObject的类别。
67。创建一个NSObject的类别称为“创建一个非正式协议”。非正式协议,只是一个表达式,表示“这里有一些你可能希望实现的方法,因此你可以使用它们更好地完成工作”。
68。选择器,只是一个方法名称。可以使用@selector()预编译指令指定选择器。一个名为respondsToSelector:的方法,该方法询问对象以确定其是否能够响应某个特定的信息。
69。formal protocol正式协议:一个命名的方法列表。采用协议的方法是在类的@interface声明中列出协议的名称。声明协议,@protocol NSCoding 。。。 @end
70。采用协议,@interface Car: NSObject <NSCoping> ... @end
71.内存管理原则:如果你使用alloc,copy或new方法获得一个对象,则该对象的保留计数器的值为1,而且你要负责释放它。
72。shallow copy浅层复制:不复制引用对象,新复制的对象只指向现有的引用对象。deep copy深层复制,将复制所有的引用对象。
73。使用的数据类型中为实例变量和方法参数指定协议名称。如,方法要求对象遵守NSCopying协议,: -(void)setObjectValue:(id<NSCopying>) obj;
74. 对方法的定义:@optional 可选实现 @required 要求实现
75。Interface Builder 也称作IB。
76。NSDate,是Cocoa中用于处理时间和日期的基础类。使用[NSDate date];获取当前的日期和时间。+dateWithTimeIntervalSinceNow: 接受一个NSTimeInterval参数,以秒为单位。正数表示将来的时间,负数表示过去的时间。
77。NSData,包装大量字节的类。NSData对象是不可改变。NSMutableData支持数据内容中添加和删除字节。
78。序列化和反序列化,就是编码和反编码。编码:对象可以将它们的实例变量和其他数据编码为数据块,然后保存到磁盘中。反编码:将保存在磁盘中的数据读回到内存,还能基于保存的数据创建新对象。
79。KeyedAarchiver使用健/值对保存对象。encodeObject:forKey:或encodeInt:forKey:...保存对象。decodeObjectForKey:或encodeIntForKey:...恢复对象。
80。键值编码亲切的称为KVC。一种间接更改对象状态的方式,现实方法是使用字符串描述要更改的对象状态部分。包括-valueForKey:和-setValue:forKey:。以字符串的形式向对象发送消息。
81。valueForKey:返回以键-key或-isKey命名的getter方法,如果不存在getter方法,查找对象内部名为_key或key的实例变量。
82。KVC具有自动包装功能。即,setValueForKey时自动将标量值(int,float和struct)放入NSNumber或NSValue中。-setValue:forKey: 按名称设置值。
83。编译器和苹果公司都以下划线开头的形式保存实例变量名称。
84。使用-valueForKeyPath和-setValueForKeyPath方法访问路径。eg。[car valueForKeyPath: @"engine.horsepower"];键路径是任意的。 可以整体操作,向一个NSArray请求一个键值,返回一个NSArray。
85。流畅的用算,eg。[garage valueForKeyPath: @cars.@count];返回总车辆数。其中的@count用于通知KVC机制计算键路径左侧的结果。eg。[garage valueForKeyPath: @cars.@avg.mileage]; 返回平均每辆汽车行驶的距离。@avg运算符将键路径分成两部分,前半部分cars,是汽车一对多关系的键路径,后半部分键路径表示距离。进行循环累加后并计数再进行除法运算。还有@min,@max等操作。
86。批处理,dictionaryWithValueForKeys: 接受一个字符串数组,调用获取一些键,构成字典。
87。<null>和(null)的区别,<null>是一种[NSNull null]对象,而(null)是一个真是存在的nil值。
88。创建谓词:NSPredicate *predicate = [NSPredicate predicateWithFormat: @"name = 'Herbie'"]; 使用字符串在后台构建对象树,这些对象树用来计算谓词的值。 使用谓词,BOOL match = [predicate evaluateWithObject: car]; 根据指定的对象计算自身的值。
89。使用-filteredArrayUsingPredicate: 方法过滤。
90。%K 指定键路径。
91。字符串的关系运算符:BEGINSWITH: 检查某个字符串是否以另一个字符串开头。ENDSWITH:检查某个字符串是否以另一个字符串结尾。CONTAINS:检查某个字符串是否在另一个字符串内部。LIKE:问号表示一个字符匹配,星号表示与任意个字符匹配。MATCHES:运算符,赋给该运算符一个正则表达式。
92。[c],[d],[cd]修饰符:c表示不区分大小写,d表示不区分发音符号。
93。end