首页 > 代码库 > Objective C学习笔记
Objective C学习笔记
1、代码文件类型:
(1)、[.h]头文件
(2)、[.m]c代码
(3)、[.mm]c++代码
2、调用头文件的方法#import,且只在没有调用过的时候调用一次,类似于PHP的require_once。
3、字符串NSString
通过@标志符,可由字符串常量定义NSString对象。如,
NSString *f = @”岁月长”;
4、类(Class)
(1)、定义
Objective-C定义类先用在.h头文件里定义接口,然后在.m代码文件里实现。
.h头文件
@implementation到@end之间的部分被看作是类的定义。
.m文件
(2)、类实例化
类名* 类实例名=[[类名 alloc] init]
或
类名* 类实例名=[类名 new]
(3)、类型
Objective-C的对象定义可以支持强类型的实例,以及弱类型(用“id”表示)的实例的定义。
(4)、方法(Methods)
方法Methods亦称函数,在Objective-C的类与java Class类似,可以定义“实例的方法”和“类的方法”。
用负号[-]表示该方法为实例的方法
(5)、发送消息
Objective-C调用方法是通过发送消息给对应的实例对象。发送消息的方式其实是和其它的语言一样就是调用实例对象的方法,Ojbective-C独特的地方就是方法的调用是通过一个方法名+零个或多个标识符+零个或多个参数,而一般语言只需要一个方法名+零个或多个参数就可以了。Ojbective-C之所以把调用方法称为发送消息,是因其所有的消息发送之后都是动态传递给实例对象。并且,如果一个子类定义了一个和父类相同方法名+标识符的方法之后,子类会先收到该消息,然后选择性的是否继续将该消息传递给父类。
发送消息是通过一对方括号[]来实现,如
实例对象在左边,消息以及参数等的定义在右边。且为避免生成多余的临时变量,Objective-C允许直接使用消息的结果,如下
(6)、类方法
类似于静态方法,定义的时候和实例的方法有区别的地方只是在开头的符号为加号[+]。
(7)、属性@property
属性是一个可以取代方法的方便符号。在类中声明定义属性时,并不创建新的实例,就是一个能够方便快捷的用来访问实际已经存在的变量的。也就是说,属性其实并没有真正的存储任何数据。
属性还可以定义一些访问该属性时的限制或者如何获取该属性,例如指定copy用来复制该属性,readonly用来指定该属性只读。
调用某实例的属性有两种方法,一种是通过方括号,和调用方法类似,另外一种是通过点符号[.]。
(8)、方法返回值
在Objective-C里面方法的返回类型需要用圆括号包住,当编译器看到减号或者加号后面的括号了之后,就会认为这是在声明方法的返回值。若不声明返回值,编译会给没有写显式返回值的函数加上一个默认的返回值,它的类型是id。
(void)申明没有返回值。
(9)、self和super
self等同于this,其本身是一个id类型的一个指针变量。
访问变量self->变量名称。
super访问超类的方法或变量。
5、协议和委托(Protocols and Delegates)
Objective-C中的协议(Protocols)类似于常用的接口,协议(Protocols)中定义的方法,在类中实现。
6、内存使用
(1)、ReferenceCounted,即应用计数,过程:alloc--->retain--->release--->--->release--->dealloc。
(2)、NSAutoreleasePoolalloc
7、打印日志NSLog
NSLog(@“岁月长,衣衫薄。”);
8、布尔值
在Objective-C里面,Bool其实是singed char,YES是1,NO是0。其里面的所有逻辑判断和C语言保持兼容,如果数据不是0判断为真,如果数据是0那么就判断为假。
9、SEL、Class、IMP
(1)、Objective-C在编译的时候,会根据方法的名字(包括参数序列)生成一个用来区分这个方法的唯一标识,这个标识就是SEL类型。
SEL 变量名=@selector(方法名字);
SEL 变量名=NSSelectorFromString(方法名字的字符串);
NSString* 变量名=NSStringFromSelector(SEL 变量名);//返回SEL变量对应的方法名。
(2)、Class类似于java中的Class,可以用来获取所定义类的相关信息.。
Class 变量名=[类或对象 class];
Class 变量名=[类或对象 superclass];
Class 变量名=NSClassFromString(类名字的字符串);
NSString* 变量名=NSStringFromClass(Class 变量名);//返回类名字。
(3)、IMP,给一个方法起一个名字,实现动态调用,不用再使用[对象 message]的方式。
Human* human =[Human new]; Man* ma=[man new]; //根据方法名say找到该方法的id,将sel与其绑定; SEL sel =@selector(say);//也可以这样写:SEL sel=NSSelectorFromString(@"say"); IMP imp1 = [human methodForSelector:sel]; IMP imp2 = [ma methodForSelector:sel]; imp1(human,sel); imp2(ma,sel);
//因为每个方法都有自己的地址,这种方式直接找到地址区分相同ID的方法,效率最高,但灵活性不如SEL方式。
10、实例变量作用域
@private
@protected
@public
其意义跟java相应的关键字等同。
而类方法在Objective-C里面,从理论上来说所有的方法都是公有的。
11、Final
不想让某个方法被重写,只需定义一个宏
#define FINAL
Objective C学习笔记