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

---------------------- <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产生的。否者会报错。

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>、期待与您交流! ----- -----------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值