1.编译的时候报错,但是没有提示,说明肯定是链接报错的了。
2.Xcode是将项目中的.m文件一起编译和链接的。
3.统一的一类方法使用 - 隔开,分成一个组
4.当独的注释一个方法的时候,就不要使用 - 了,#pragma mark xx方法
5.!感叹号,是标示链接的错误
6..点语法的本质,还是方法调用,相当于setAge:10 p.age = 10;或者是 [p age]; p.age;
7..语法注意调用的问题,不发生死循环
8.@public 在任何地方都能直接访问对象的成员变量
@private 只能在当前类的对象方法中直接访问
@protected 可以在当前类及其子类的对象方法中直接访问(默认是@protected)
@package 只要处在同一个框架中,就能直接访问对象的成员变量
9. .m中的私有成员变量名不能与声明部分的成员变量同名
10.OC是单继承,只能有一个父类,C++有多继承,多个父类,父类中的所有成员变量,子类中都会有
11.@property 可以自动生成某个成员变量的setter和getter方法的声明
12.编译器是最笨的,你怎么写它就怎么生成方法
13.@synthesize 自动生成age的setter和getter实现,并且会访问_age这个成员变量
@synthesize age = _age;如果不存在成员变量,会自动生成@private类型的_age变量,默认情况下会访问age和它名字一样的成员变量。
14.Xcode会按照我们的方法,我们声明的方法,检查有,他就不会生成了
15.继承是重写,属性的setter,gertter也能重写
16.id 万能指针,只适用于oc对象
17.完整地创建一个可用的对象
1>分配存储空间,+alloc
2>初始化 -init
18.构造方法:重写init方法,给赋值
1>一定要调用super的init方法,初始化父类中声明的一些成员变量和其他属性
2>如果对象初始化成功,才有必要接下来的初始化
3>返回一个已经初始化完毕的对象
19.自定义构造方法:
1>一定是对象方法,一定以 - 开头
2>返回值一般是id类型
3>方法名一般以init开头
20.分类,类别,类目,Category,给某一个类扩充一些方法,不修改原来类的代码
21.类扩展:
22.分类是的实现方法中可以访问类的成员变量。
23.分类的优先级最高,现在分类中查找,然后再去原来类中找,最后到父类中去找
24.分类只能增加方法,不能增加成员变量;分类方法实现中可以访问原来类中的声明的成员变量;分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用;方法调用的优先级,分类(最后参与编译的分类优先)->原来类->父类
25.- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapWidth; //意思就是用来创建一个内容可拉伸,而边角不拉伸的图片,需要两个参数,第一个是左边不拉伸区域的宽度,第二个参数是上面不拉伸的高度。那么接下来的一个像素会被拉伸。例如,leftCapHeight为6,topCapHeight为8。那么,图片左边的6个像素,上边的8个像素。不会被拉伸,而左边的第7个像素,上边的第9个像素这一块区域将会被拉伸。剩余的部分也不会被拉伸。
26.类的本质也是一个对象
27.类的加载,+load;程序已启动分类和类都会加载进内存,分类优先加载类的方法,只会执行一次;当第一次使用某个类时,就会调用当前类的+initialize方法。
28.不要在description方法中执行输出语句,会死循环
29.-(NSString *)description方法决定了实例对象的输出语句,+(NSString *)description方法决定了类对象的输出结果
30.SEL把test2包装成SEL类型的数据,根据SEL数据找到对应的方法地址,根据方法地址调用对应的方法。
31.performSelector:@selector(test2)];调用方法的2种方式
32.当只知道一个方法名的字符串,也可以调用这个方法,NSString *name = @"test2";SEL s = NSSelectorFromString(name); [p performSelector:s];
33._cmd 代表当前方法,SEL类型的数据,这样调用方法是很耗性能的,运行时就可以直接把方法名拿过来调用,其实发消息就是SEL