A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ZXY66452 中级黑马   /  2015-12-3 22:44  /  502 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.类的声明


1-1@interface开始,@end结束

1-2变量和方法不能混在一起,实例变量必须放在{}内

1-3没有static、const的实例变量。在.m文件中可以声明static静态属性:属于类,不属于对象。同样,也没有const方法,没有友元方法。

1-4“-”声明的方法是protect,“+”声明是public,如果一个方法在.h中没有声明,但在.m中有定义,则只能是.m文件中类内部使用的private方法。所有方法都不能在类的声明中实现。

1-5所有的类都继承自NSObject。

1-6实例变量的默认访问权限是@protected.

1-7方法的返回值类型和参数可以不写,默认是id类型(相当于C++中的void*通用指针类型)。

1-8同一个类内方法不能重载,即方法的签名不能完全一样。


2.类的实现



2-1和.h文件下声明保持签名一致,必须有方法的实现体。如果一个方法在.h中没有声明,但在.m中有定义,则只能是.m文件中类内部使用的private方法。


3.类的实例化

3-1 ObjC中,所有对象都在堆区创建,不能在栈区创建对象。例如:在堆区分配内存,创建对象。

Fraction * frac = [Fraction alloc]init];

3-2 关于空对象nil。类似于C++ 中的NULL。

区别:nil是一个对象,而NULL只是一个值 NULL==0

nil调用人和方法都不起作用,不产生crash也不抛出异常。

3-3 –alloc方法继承自NSObject,子类不能重载(子类可以重写init方法)。alloc是类方法,只能通过类名调用。

3-4 alloc分配内存后还需要使用init方法将实例变量初始化。


4.消息

ObjC 中最大的特色就是消息传递。

消息的接收者一定是对象。消息接收者的实参可以是消息表达式。


5.对象初始化

5-1对象创建出来以后,对象的内存被初始化为0.

5-2 初始化方法实现(模式):

-(id)init

{

     if(self =[super init])

{

     …

}

return self;

}

5-3 初始化方法可以有多个,一般所有初始化方法都已init开头。参数少的初始化方法可以间接调用初始化参数多初始化方法,实现重用。

5-4 一个类可以多个初始化方法,但只能有一个指定初始化方法。它一般有最多的参数,做最多工作的初始化方法。其他初始化方法可以调用它。


6.属性

6-1 类的实例变量一般为保护或私有,通过对象不能访问这些实例变量,可以通过get或set访问。get和set命名规则:get+实例变量名(首字母大写),set相同原则。

6-2 属性声明机制:

@property 类型名 属性名 写在.h中

@synthesize 属性名  写在.m中

@property int age; 默认是可读可写readwrite,即自动生成get和set方法。@property(readonly)intage;只读属性,只生成get方法。@property(writeonly)int age;只可以写属性,只生成set方法。

6-3 属性的访问

stu.age; == [stu age];都是调用get方法

stu.age = 10; == [stu setAge:10]; 都是调用set方法


7.self和super

7-1 self是方法的一个隐藏参数,类似于C++中的this,

在.m文件中 self是指向当前实例的指针,它的值可以改变。(self->age)

当一个方法调用同类中另一个方法时self不可以省略。

([self initWithAge:20])

必须使用self指明消息的接受者。

7-2 super是一个编译指示符。它只是告诉编译器,当调用class的方法时,要去调用父类的方法,而不是本类的,但消息接收者依然是本类,即super不改变消息接收者。


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马