纪录近期遇到的问题
1.局部变量必须初始化。在objective-C中成员变量会被自动初始化,根据变量类型自动被置为0,nil, NO等。但是局不变量需要手动初始化,这个类似于C/C++语言。
2.self和super的区别。self表示的是只想当前对象的指针,而super并不是指向父类的指针,而只是一个编译器的指令符号,在编译的时候被展开为如下这种形式:struct objc_super {
id receiver;
SuperClass class;
}; id表示self指针,SuperClass表示父类。所以super存在于self的上下文中,相对于self而言。
3.convertRect的方法的使用小结。当动画涉及到更改UIView的大小和transform时,使用convertRect将得不到正确的frame大小。另外,convertRect的使用形式如下:[self convertRect:self.bounds]和 [self.superView convertRect:self.frame],差别主要在传递CGRect时传递bounds或者frame。
4.分类的用法。尽量为分类中的方法添加前缀名,避免分类与原来的类、原来的类的扩展和同一个类(父类)的其他分类具有相同的方法名,如果存在同名的话,系统则任意调用其中的一个。就是说某个类的当前扩展以及其父类中的扩展不能存在同名的方法名,否则将导致执行紊乱。并且如果使用分类重写系统中的某个类的某个方法,则无论是否包括该扩展,该扩展中的方法都有可能被调用。
5.UILabel与fontSize的关系。一般至少将UILabel的高度设为sizeFont的高度加4,否则英文字体很容易被截断,中文显示无压力。
6.UIView的animateWithDuration:delay:options:animations:completion:的问题。通过这个方法改变UIView的transform在iOS5和iOS6上表现有所不同,其实就是iOS5可能存在问题,所以当需要更改transform时,请尽量使用CABasicAnimation这个技术。