1.id类型
基本概念
id类型可以代表所有对象的类型,任意类的对象都可赋值给id类型的变量。id类型其实就是万能类型的指针。当通过id类型进行调用时,需要注意OC将会执行动态绑定。所谓动态绑定,是指OC将会跟踪对象所属的类,它会在运行时判断该对象所属的类,并在运行时确定需要动态调用的方法,而不是在编译时确定要调用的方法。
代码实现:
以最简单的为例,接口部分与实现部分就不展示 就是最简单的输出,
要调用对象时使用id类型的就在main函数中修改一下就行了
需要注意的时id类型为指针 所以再次使用时不需要再打 *
int main(int argc, const char * argv[]) {
@autoreleasepool {
student *p = [[student alloc] init]; //创建一个student对象
[p speak];
// 使用万能指针id类型这样写:
// id p = [[student alloc] init]; //创建一个student对象
// [p speak];
}
return 0;
}
总结:
1.id是一种通用的对象类型,其可以用类存储属于任何类的对象,可以理解为万能指针
2.在id的定义中,已经包装好了*号,id指针只能指向os的对象
3.不需要强制类型转换,id可以直接使用
4.编译器看到id以后,认为是动态类型,不在检查类型
2.方法
1.
从功能上看其完全类似于传统结构化程序设计里的函数,但是与其不同的是,方法不能独立存在,所有的方法都必须定义在类里。方法逻辑上要么属于类,要么属于对象。
2.
所有的方法都必须使用“[类 方法]”或着“[对象 方法]”的形式调用。
3.
方法类型标识符要么是 + ,要么是 - ;
其中 +代表该方法为类方法,直接用类名就可以调用;
- 代表该方法为实例方法,必须用对象才能调用。
4.
一旦将一个方法定义在某个类的类体里,方法如果使用了 + 标识符,则这个方法就属于这个类,如果使用了 - 标识符,则这个方法就属于这个类的实例。
5.
方法后面带一个冒号,表明它是带一个形参声明的方法。
(
在5.2.2 形参个数可变的方法 中提到 在最后一个形参名后增加逗号和三点(,…),则表明该形参可以接收多个参数值,同时需要注意:是通过while循环迭代的方式来确保能正确跳出循环,跳出循环的条件为是否为nil
( Nil:表示无值,任何变量在没有被赋值之前的值都为nil。)
一个方法中最多只能包含一个个数可变的形参。
)