最新消息:20210917 已从crifan.com换到crifan.org

【整理】Object-C学习总结

Object-C crifan 3673浏览 0评论

上接:

管理你在Xcode中的工作流程


下面记录学习:Write Objective-C Code的心得:

 

1. Object-C是ANSI  C的超集

 

2. Object-C最大的特点就是动态性(dynamic),很多功能,行为,都是在运行的时候,才知道的,而不是在编译的时候固定的。

 

3.Object-C对C做出了如下的扩展:

  • 定义了新的类

  • 类Class和实例的方法

  • 方法调用(叫做 消息Messaging)

  • 声明属性(并且自动生成访问函数)

  • 静态和动态的类型

  • 块Block:一段封装好了的代码段,可在任意时刻运行

  • 在语言本身上做出了一些扩展,比如协议protocol和分类category

 

4.Object-C中创建class的object包括了两步:分配(allocation)和初始化(initialization)

 

5.Object-C文件的后缀名

(1)头文件

.h和C,C++都是一样的。

(2)源码文件

.m就相当于C语言的.c文件

.mm就相当于C++的.cpp文件。

 

6.用#import导入头文件(而不是C或C++ 的#include)

#import可以保证同一个文件(永远都)不会被导入多次

 

7.Object-C中类定义的语法:

class_decl

8.Object-C中支持动态类型定义,关键字是id,就像js中的var一样。

其实,对此方面的支持,Python做的更好,灵活度更高。用过Python中的dict的,都懂的。

9.Object-C中的对象引用,一定是(用星号*开头的)指针类型变量。

10.Object-C中的方法method,可以理解为属于某个特定对象object范围内所包含的函数function。

给一个对象发送消息,即messaging一个对象,就是调用该对象的那个方法。

Object-C中有两种方法:

(1)实例Instance的方法:很显然,实例的方法,只属于实例。

所以,当你想要调用某个实例的方法之前,当然需要先创建(该对象的)实例。

最常见的就是实例的方法。

(2)类Class的方法:

class的方法的作用域是整个的class。其并不一定需要一个消息的接受者是一个对象的实例。

11.方法的声明的语法如下:

method_declaration

如上,该方法的全名是 insertObject:atIndex:

其中包含了签名关键字(signature keyword)和冒号。

12.[xxx] 其实叫做 消息表达式Message expression。本质上就是方法的调用。

13.类的方法的定义,和对象的方法定义基本一致,唯一不同在意最开始的那个减号"-"变为加号"+"

14.对象包含属性Property。

获得属性的方法叫做getter,方法名为:orginalPropertyName

设置属性的方法叫做setter,方法名为:setOrginalPropertyName

15.Block的语法为:

blocks

调用方式为:

int result = myBlock(4); // result is 28

16.protocol

(1)一个protocol定义了一些方法,这些方法可以被很多类所实现,而实现了这些方法的类,未必非要是共同拥有一个父类(superclass)。

protocol定义的方法,与任何的特定的类都是独立的。

protocol定义了一个方法,而这些方法是由其他类负责实现。

如果你的类实现了某protocol所定义的方法,则可以说你的类是符合(conform)该protocol的。

17.Object-C中self类似于C++中的this

 


下转:

Cocoa的Foundation Framework学习笔记

 


下面继续记录在此记录其他一些关于Object-C的心得:

1.将Warning看做是Error

Your Second iOS App – Troubleshooting中所言,Object-C是一种很灵活的语言,即约束很小,所以,很多时候,你在是使用Xcode编译项目的时候,如果发现警告Warning,那么基本上可以将其看作为错误Error。

即需要你将其解决掉,否则,你去运行程序时,十有八九会出错。

2.

转载请注明:在路上 » 【整理】Object-C学习总结

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
92 queries in 0.194 seconds, using 23.31MB memory