您的位置:首页 > 职场人生

黑马程序员 初学OC的一些注意总结2

2014-06-30 07:22 344 查看
---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、

<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----- -----------------
初学OC的一些注意总结2

1、  注意编译和运行过程中不同: 父类 名称 = [子类new] 在这个过程中编译器会给出警告,但不是错误。
运行的结果是使父类指针指向子类对象。这是由于oc是弱语法,这种最好是不出现父类指针调用子类特
有的方法(注意理解这句话)会出现警告。如果要调用这个方法的话就要强制转换
2、  强制转换是做给编译器看的
3、  OC是弱语法:Dog*d = [Cat new];[ d eat];在编译器中能通过,并且能运行eat方法。
4、  如果一个方法没有定义,oc编译不会报错,而且还能生成可执行文件。但是 .out文件运行会报错:
unrecognized selector sent to instance 即给实例发送了一个不能识别的消息。
5、  Oc在运行的时候才会检测对象有没有实现相应的方法(动态检测),可以没有声明,方法也能运行,
一般在main的前面。一般会出现闪退。
6、  要善于思考,思考代码的合理性。
7、  返回值是布尔类型的BOOL命名通常是isXXX开通
8、  在分.m 和.h文件是,注意不要#import “xxx.m ” 文件 这样会出现重复定义的错误,xcode链接是
把所有的.o文件一起链接运行的
9、  点语法的本质是方法调用xxx . xxx=10相当于[xxxxxx:10],成员变量的访问xxx->xxx。点语法表示的
不是setter方法就是getter方法
10、             变量的作用域:@public:在任何地方都能访问对象的成员变量 @private 只能在当前的类的
对象方法中直接使用。@protected 当前类和子类 @package 在同一个框架下使用,它介于public和private
之间。如果在.m文件中定义的成员变量名时的变量就是私有的,并且不能与声明中的成员变量同名
11、             @property是编译器语法,即编译器遇到它是就是自动展开setter和getter方法的声明,
@synthesize自动实现setter和getter方法。如果没有声明相应的成员变量,他会自动生成成员变量。并且还
是@private的作用域
12、             在setter和getter方法中又一个方法没有实现,用@property系统帮你生成另一个,并和成员变
量(如果没有的话),@property 参数类型分为四类:1、内存管理 ,retain(set方法里面的内存管理,OC对
象类型) 和assign (set方法直接赋值 ,也就是默认的情况,非      OC对象类型),还有一个copy(retain差不
多) 2、是否生成set方法:readonly(只读),readwrite(可读可写,默认)3、多线程管理:nonatomic(性能高)
 atomic(性能低 默认)4、setter和getter方法的命名
13、             万能指针,id,它包含*,即定义指针为 id p=[Person new];
14、             New方法的解构:1、alloc,分配内存 2、init,对象初始化Person *p = [Person new]相当
于Person *p = [Person alloc]; Person *p1 = [pinit];
15、             在重写init方法时,必须写[super init];保证初始化父类的一些成员变量,然后根据需要在自己重写的
方法中初始化一些数据,一般还需要判断self是否为空即:if(self != nil)  (nil相当于0),一般
这样写:if(self = [super init]) …
16、             自定义的构造方法规范:1、对象方法 2、  返回值是(id) 3、都是已init开头最好是initWith开头
17、             代码中尽量低耦合才是完美的,即更改一个方法或者类的内容,不会影响或影响最低它类或方法
18、             @category在不给以前类内的基础上增加类的方法  格式:             @interface 类名(类别名称) @end  @implementation 类名(类别) @end
19、             注意类别中要使用原类中的成员变量时,变量必须是明文定义的,不能是@property产生的。否者会报错。<
4000
/p>
20、             在使用类别是如果有名称相同的方法,类别的方法优先级更高,即在类别中会覆盖原来类中的方法。在两个
类别中都有同名方法,最后一个编译的被使用
21、             类的本身也是一个对象,它的类型是Class类型,称之为“类对象”,注意与实例对象的区别。Class定义的
时候不需要加(*)它包含了星,
22、             获取内存中的类对象的方法1、[实例对象class] 2、[类名class] 
我们用%p输出指针的地址。

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、

<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----- -----------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息