OC补充
OC
1成员变量默认初始化为0
2匿名对象:就是没有名字的对象,比如:(不建议使用)
3 [Car new]->speed = 300;
[[Car new] run];(运行结果speed为0,因为又重新创建新的对象了)
4 API查询:help->API
安装离线文档方法:右击Xcode.app->显示包内容->contents->developer->documentation->docsets,然后把离线文档docsets放进去。
第二种安装方法:资源库-> developer->shared->documentation->docsets
5 实例变量不能在类方法中访问,因为实例变量只能由实例对象访问
6 类方法中不能访问成员(实例)变量
7 open ./
8 OC不允许子类和父类拥有相同的成员变量,可以有相同的方法
9 OC继承示意图:
10 isa是NSObject的一个成员变量,每一个对象都会有一个isa指向该对象对应的类。
11 对象(或类)调用某个方法时,优先在当前类中找,找不到在去父类中去找
12 耦合就是两个事物关系紧密,你离不开我,我离不开你。
13 继承的使用场合:当A类拥有B类的部分属性和方法,就可以考虑让B类继承A类
14 继承和组合的使用场合
继承:xxx是xxx,组合:xxx拥有xxx,如何正确使用继承和组合呢?可以试着把这两个类套进去读读看哪个顺?比如:有两个类,一个是成绩类(语文,数学),一个是学生类,套进去,学生是成绩?学生拥有成绩,这时就应该使用组合。
15 super关键字:使用super可以调用父类的方法。如果super处在的方法是对象方法就会调用父类的对象方法,反之则类方法。super的使用场合:子类重写父类的同时保留父类的一些行为
16 多态就是父类指针指向子类对象,调用方法时会检测对象的真实对象(子类)。
多态的使用:如果参数中使用父类类型,可以传入父类和子类对象。多态指针调用方法注意,编译的时候先看看父类有没有该方法,运行的时候是调用子类的方法。
多态有一个局限性,就是父类类型的变量不能直接调用子类特有的方法,可以通过强制转换进行调用。
17 - (void)setX:(double)x andY:(double)y
{
[self setX:x];
[self setY:y];
}如果有重复的代码可以使用self调用那个方法
18 math.h中有一个函数pow(n,m)求n的m次方,sqrt(n)对n开根。
19 有时间做下李明杰留的作业
20 command+q全部退出
21 #pragma mark – 注释
22 @property int age, weight;
23 @property生成的成员变量是私有的,如果在@interface中已经写了该成员变量(默认是@protected)就不会生成一个私有的成员变量。
24 @synthesize age;默认访问age这个成员变量,不是_age
25 如果重写setter和getter方法就用自己写的。
26 如果同时重写了setter和getter方法就不会自动生成_开头私有的成员变量,只写一个还是会生成_开头私有的成员变量(上机试下)
27 id相当于NSObject *,id指向任何OC对象
28初始化父类,(谁的成员变量就交给谁处理)
29 init执行过程
30 修改Xcode模版路径:
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates
* File Templates 文件模板:可以修改类文件等
* Project Templates 项目模板:可以修改一些项目描述
31 分类只能增加方法,不能增加成员变量,但是分类方法中可以访问原来类中声明的成员变量,
(32 分类优先级较高,如果在分类中跟原来的类有同名的方法,优先选用分类中的方法,如果有多个分类覆盖原来类的方法,使用最后编译的那个分类中的方法,可以在项目名称->build->compile source中查看
33 对象调用方法时,优先去分类中找,找不到去原来类中找,还找不到最后去父类中去找。
34分类可以重新实现原来类中的方法,但是会覆盖原来的方法,会导致原来的方法无法使用,不建议这么用)
35 删除一个框架时注意,不要选择move to trash(移至废纸篓),不然框架就真没了
36 给NSString增加一个方法,计算字符串中阿拉伯数字的个数。
这里用到一个方法characterAtIndex:NSUInteger通过下标获得该下标字符,c>=’0’ && c<=’9’
37给NSString增加一个对象方法,计算字符串中阿拉伯数字的个数。
38 在创建对象之前,系统会先把类加载进内存。
39 类对象:类也是对象,其类型是Class,(不带*,内部已经加过)。所有对象都有一个继承自NSObject的属性isa,指向对象对应的类。
40 获取内存中的类对象->Class c = [p class];//通过对象获取,还有一种方式Class c = [Person class];//通过类获取
41 类名就代表类对象。
42 +(void)load;// 当程序启动时会加载一次项目中所有的类以及分类,类加载完毕后就会调用此方法,先加载父类在加载子类。
43 +(void) initialize; // 第一次使用这个类的时候,就会调用一次此方法。先初始化父类在初始化子类。分类是最后加载的。
44 description方法,在NSLog里,打印对象的时候,系统会先去调用-description方法,将返回值(NSString*)显示到屏幕上。不要在description方法里使用NSLog方法会引发死循环。打印类的时候,先去调用+description方法,原理同上。
45 NSLog输出C语言字符串的时候,不能有中文,应该使用printf。
46 __func__输出当前函数名%s,__FILE__输出源文件绝对路径%s-(printf),__LINE__输出当前行号%d
47 调用对象的方法还有一种方式perfromSelctor:(SEL) withObject:(id) //SEL是方法名,id是给该方法传参数
48 NSSelectFromString返回SEL,把一个字符串转换成方法名
49 NSStringFromSelector 返回字符串,把一个方法名转换成字符串
50 每一个对象方法里面都有一个(SEL)_cmd代表当前方法,可以通过转换成字符串打印证明。
51 SEL是对方法的一种包装,讲方法包装成一个SEL类型的数据,去找对应的方法地址,找到方法地址就可以调用方法。
52 ARC的判断准则:只要没有强指针指向对象,就会释放对象
指针分2种,强指针,弱指针。默认所有对象都是强指针
Assign用在基本数据类型,适用于非OC对象
Strong,weak适用于OC对象
53 把老项目MRC转换成ARC方法:edit->refactor->convert to ARC…
54 在ARC环境下,如果某些文件不想使用ARC就在build phases中把这些文件双击后写入-fno-objc-arc改为MRC,反之写入-f-objc-arc
55 当两端循环引用的时候一端用weak,一端用strong
PS:摘自李明杰视频教程,非常感谢李老师详细的讲解!