博客正式开通啦!以后会每天为大家更新知识,将过去学习的笔记发布出来。供大家学习交流。

在Objective-C 中,id 类型是一个独特的数据类型。在概念上,类似Java 的Object 类,可以转换为任何数据类型。换句话说,id 类型的变量可以存放任何数据类型的对象。在内部处理上,这种类型被定义为指向对象的指针,实际上是一个指向这种对象的实例变量的指针。例如,下面定义了一个id类型的变量和返回一个id类型的方法:

  1. id object;
  2. - (id) newObject: (int) type;

id 和void *并非完全一样。下面是id在objc.h中的定义:

  1. typedef struct objc_object {
  2. Class isa;
  3. } *id;

下面做一个案例来分析id数据类型

学生类的头文件代码Student.h

#import <Foundation/Foundation.h>

@interface Student : NSObject

{

NSString *_name;  //定义成员变量name;

NSString *_sid;

}

@property(nonatomic,strong)NSString *name;

@property(nonatomic,strong)NSString *sid;

+(Student *)studentWithName:(NSString *)name andSid:(NSString *)sid;

-(instancetype)initWithName:(NSString *)name andSid:(NSString *)sid;

-(void)print;

@end

学生类的实现文件代码Student.m

  1. #import "Student.h"
  2. @implementation Student
  3. -(instancetype)initWithName:(NSString *)name andSid:(NSString *)sid
  4. {
  5. self = [super init];
  6. if (self) {
  7. _name = name;
  8. _sid = sid;
  9. }
  10. return self;
  11. }
  12. +(Student *)studentWithName:(NSString *)name andSid:(NSString *)sid
  13. {
  14. //在类方法中由于还没有创建实例,所有self不能使用
  15. return [[Student alloc]initWithName:name andSid:sid];//类方法是通过类名使用的,不能创建新的实例变量
  16. }
  17. -(void)print
  18. {
  19. NSLog(@"name = %@,sid = %@",_name,_sid);
  20. }
  21. @end

测试文件代码main.m

  1. #import <Foundation/Foundation.h>
  2. #import "Student.h"
  3. int main(int argc, const char * argv[]) {
  4. @autoreleasepool {
  5. Student *stu = [Student studentWithName:@"zhangsan" andSid:@"123456"];
  6. [stu print];
  7. id temp;
  8. temp = stu;
  9. [temp print];
  10. }
  11. return 0;
  12. }

结果输出如下:

OC_id类型的更多相关文章

  1. 【.net 深呼吸】细说CodeDom(5):类型成员

    前文中,老周已经厚着脸皮介绍了类型的声明,类型里面包含的自然就是类型成员了,故,顺着这个思路,今天咱们就了解一下如何向类型添加成员. 咱们都知道,常见的类型成员,比如字段.属性.方法.事件.表示代码成 ...

  2. 【.net 深呼吸】细说CodeDom(4):类型定义

    上一篇文章中说了命名空间,你猜猜接下来该说啥.是了,命名空间下面就是类型,知道了如何生成命名空间的定义代码,之后就该学会如何声明类型了. CLR的类型通常有这么几种:类.接口.结构.枚举.委托.是这么 ...

  3. opencv中Mat与IplImage,CVMat类型之间转换

    opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...

  4. [C#] async 的三大返回类型

    async 的三大返回类型 序 博主简单数了下自己发布过的异步文章,已经断断续续 8 篇了,这次我想以 async 的返回类型为例,单独谈谈. 异步方法具有三个可让开发人员选择的返回类型:Task&l ...

  5. C# - 值类型、引用类型&走出误区,容易错误的说法

    1. 值类型与引用类型小总结 1)对于引用类型的表达式(如一个变量),它的值是一个引用,而非对象. 2)引用就像URL,是允许你访问真实信息的一小片数据. 3)对于值类型的表达式,它的值是实际的数据. ...

  6. salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)

    本篇引用以下三个链接: http://www.tgerm.com/2012/01/recordtype-specific-picklist-values.html?m=1 https://github ...

  7. Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示

    Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...

  8. ElasticSearch 5学习(9)——映射和分析(string类型废弃)

    在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...

  9. js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的

    题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array ...

随机推荐

  1. 对Servlet容器的补充和一个问题的请教

    [0]README 0.1)本文是对 一个servlet容器  的补充: 0.2)发这个博文的最终目的是为了请教各位前辈,帮我解决一个问题,问题描述在文末, 谢谢: [1]Servlet容器 1.1) ...

  2. 模式识别之概率分布---平均分布,正态分布,一阶滑动和,一阶线性回归 C语言编程

    http://wenku.baidu.com/view/11cb1669a98271fe910ef9c6.html

  3. windows下sshfs挂载远程文件夹-server could not connect故障解决

    使用sshfs挂载server上面的文件夹到windows中.轻松方便. 在之前的系统上挂载.没出问题. 近期买了块固态硬盘.装了个系统. 结果在系统上执行sshfs时报例如以下错误: 事实上非常ea ...

  4. 拍照权限,GPS权限的控制

    最近项目中会遇到一些手机用户权限的问题,从网上百度了一下,发现有一些方法不能解决判断用户权限的是否开关,下面我就介绍两种权限的判断 1 拍照的权限控制 public static boolean is ...

  5. 构造方法、this和super

    1.构造方法概述 创建对象的时候会调用构造方法.创建对象时需要给对象的属性初始化,这时需要有参的构造方法. 构造方法的格式: 修饰符 构造方法名(参数列表) { } 构造方法的体现: 构造方法没有返回 ...

  6. Android无线测试之—UiAutomator UiDevice API介绍五

    屏幕旋转 一.屏幕旋转相关知识: 1)旋转方向:0度,90度(向左转),180度,270度(向右转) 2)重力感应器:重力感应器是旋转所依靠的 3)固定位置:指将屏幕方向固定在0度,90度或者180度 ...

  7. HTML学习笔记——常用元素及其属性(二)

    一.HTML表单 -- form标签 -- 与浏览者交互 1.form 标签 -- 代表HTML表单 form标签是成对出现的,以<form>开始,以</form>结束 属性. ...

  8. python学习【第十一篇】网络编程

    一.socket的简介 socket(简称:套接字)进程间通信的一种方式,它与其他进程间通信的一个主要不同是:能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通 ...

  9. 《从零开始学Swift》学习笔记(Day 17)——Swift中数组集合

    原创文章,欢迎转载.转载请注明:关东升的博客 数组(Array)是一串有序的由相同类型元素构成的集合.数组中的集合元素是有序的,可以重复出现. 声明一个Array类型的时候可以使用下面的语句之一. v ...

  10. python3使用SMTP发送邮件

    环境:python3 ,IDE : pycharm 非常奇怪的是,用163发送邮件,如果电脑连校园网发送,会被当成垃圾邮件拒绝 如果用手机开热点就可以正常发送 代码如下 #!/usr/bin/pyth ...