黑马程序员---id
来源:互联网 发布:工频变压器设计软件 编辑:程序博客网 时间:2024/06/01 12:29
———Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ———
id 是万能指针,能指向\操控任何OC对象
id类型的定义:
typdef struct objc object{
Class isa;
} *id;
注意:
1. 因为id是一种类型,所以不可以写 id id; 就像是不可以写 int int; 一样,关键字不可以做标识符。
2. id内部已经包含*了,所以在id类型后面不需要再加*了。
id == NSObject * id相当于NSObject *
因为凡是OC对象都是由指针来操作的,而大多数OC对象基本上都是继承自NSObject,如下:
NSObject *o = [Person new]; // 可以用父类指针指向子类对象,也就是多态,而id是万能指针,能指向并操作任何OC对象,所以id相当于NSObject *,因此任何继承NSObject类的对象都可以用id来着操作。
如果在Person类的声明中使用@property声明一个id类型的变量
@property id obj; // 说明成员变量是id类型的,任何OC对象都可以作为他的属性
那么在主函数中调用的时候可以传任何OC对象,因为参数类型不确定,所以可以传任何OC对象,所以id类型也就有了局限性。
局限性:调用一个不存在的方法,编译器会马上报错。
在使用id类型时出现的一个错误:
在Person的声明中用了@property int age;然后在主函数中创建对象调用他的set和get方法。直接调用都可以,但是用点语法的时候就出现了下面的错误。
本来以为是用了@property的关系,但是_age的声明和它对应的set和get方法我手动写出来后,还是这个错误。
原因:id类型是不可以使用点语法的,id类型是OC中独有的数据类型,在内部处理上,这个类型被定义为指向对象的指针,点语法是通过对象来调用set和get方法,id是指针,所以不可以调这两个方法。
- 黑马程序员---id
- 08.黑马程序员-id指针、构造方法
- 黑马程序员 _8 OC基础 id description sel的使用
- 黑马程序员 OC------- id类型: 构造方法学习
- 黑马程序员_OC构造方法和ID类型学习学习
- 黑马程序员_OC点语法 id 构造方法复习
- 黑马程序员_OC点语法 id 构造方法复习
- 10、黑马程序员-OC语言@property @synthesize和id
- 黑马程序员——OC语言------id和构造方法
- 黑马程序员-- ID init(构造方法) Class NSLog description SEL
- 黑马程序员-关于插入一条数据,马上得到该数据ID
- 黑马程序员-点语法,成员变量作用域,@property,@synthsize和 id
- 黑马程序员——OC基础——@property、@synthesize和id类型
- 黑马程序员--Object-C--05--id、构造方法、类的深入研究、description、SEL
- 黑马程序员07--Object-C--05--id、构造方法、类的深入研究、description、SEL
- 黑马程序员—IOS环境搭建与开发入门注册APPLE ID(一)
- 黑马程序员------OC基础-----点语法、id、构造方法、Category、成员变量作用域
- 黑马程序员——Objective-C学习之@property @synthesize和id及点语法
- javascript中的each遍历
- JPA和Hibernate的关系
- UVA 10078 The Art Gallery(凸多边形判定)
- [LeetCode]144.Binary Tree Preorder Traversal
- 属性“dataProvider”有多个初始值设定项。(注意:“dataProvider”是“mx.charts.BarChart”的默认属性)。
- 黑马程序员---id
- 软了个考——操作系统好像没我想象的辣么简答啊
- zoj 3829 贪心+模拟
- codeforces Round #264(div2) A解题报告
- tomcat架构分析(valve源码导读)
- 【C++系列1】智能指针
- HDU-#4081 Qin Shi Huang's National Road System(次小生成树变形)
- ZOJ 3735 Josephina and RPG DP
- 黑马程序员——面向对象13:抽象类