码迷,mamicode.com
首页 > 其他好文 > 详细

Objective C学习笔记

时间:2014-10-02 03:29:12      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:style   http   io   os   使用   ar   java   for   文件   

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头文件

bubuko.com,布布扣 

@implementation到@end之间的部分被看作是类的定义。

.m文件

bubuko.com,布布扣 

(2)、类实例化

类名*  类实例名=[[类名 alloc] init]

类名*  类实例名=[类名 new]

(3)、类型

Objective-C的对象定义可以支持强类型的实例,以及弱类型(用“id”表示)的实例的定义。

bubuko.com,布布扣 

 

(4)、方法(Methods)

方法Methods亦称函数,在Objective-C的类与java Class类似,可以定义“实例的方法”和“类的方法”。

用负号[-]表示该方法为实例的方法

bubuko.com,布布扣 

(5)、发送消息

Objective-C调用方法是通过发送消息给对应的实例对象。发送消息的方式其实是和其它的语言一样就是调用实例对象的方法,Ojbective-C独特的地方就是方法的调用是通过一个方法名+零个或多个标识符+零个或多个参数,而一般语言只需要一个方法名+零个或多个参数就可以了。Ojbective-C之所以把调用方法称为发送消息,是因其所有的消息发送之后都是动态传递给实例对象。并且,如果一个子类定义了一个和父类相同方法名+标识符的方法之后,子类会先收到该消息,然后选择性的是否继续将该消息传递给父类。

发送消息是通过一对方括号[]来实现,如

bubuko.com,布布扣

实例对象在左边,消息以及参数等的定义在右边。且为避免生成多余的临时变量,Objective-C允许直接使用消息的结果,如下

bubuko.com,布布扣 

(6)、类方法

类似于静态方法,定义的时候和实例的方法有区别的地方只是在开头的符号为加号[+]。

(7)、属性@property

属性是一个可以取代方法的方便符号。在类中声明定义属性时,并不创建新的实例,就是一个能够方便快捷的用来访问实际已经存在的变量的。也就是说,属性其实并没有真正的存储任何数据。

属性还可以定义一些访问该属性时的限制或者如何获取该属性,例如指定copy用来复制该属性,readonly用来指定该属性只读。

bubuko.com,布布扣 

调用某实例的属性有两种方法,一种是通过方括号,和调用方法类似,另外一种是通过点符号[.]。

bubuko.com,布布扣 

(8)、方法返回值

在Objective-C里面方法的返回类型需要用圆括号包住,当编译器看到减号或者加号后面的括号了之后,就会认为这是在声明方法的返回值。若不声明返回值,编译会给没有写显式返回值的函数加上一个默认的返回值,它的类型是id。

(void)申明没有返回值。

(9)、self和super

self等同于this,其本身是一个id类型的一个指针变量。

访问变量self->变量名称。

super访问超类的方法或变量。

5、协议和委托(Protocols and Delegates)

Objective-C中的协议(Protocols)类似于常用的接口,协议(Protocols)中定义的方法,在类中实现。

bubuko.com,布布扣 

6、内存使用

(1)、ReferenceCounted,即应用计数,过程:alloc--->retain--->release--->--->release--->dealloc。

(2)、NSAutoreleasePoolalloc

7、打印日志NSLog

NSLog(@“岁月长,衣衫薄。”);

8、布尔值

在Objective-C里面,Bool其实是singed char,YES是1NO0。其里面的所有逻辑判断和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学习笔记

标签:style   http   io   os   使用   ar   java   for   文件   

原文地址:http://my.oschina.net/xiejuntao/blog/323787

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!