zoukankan      html  css  js  c++  java
  • OC_id类型

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

    在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. }

     结果输出如下:

  • 相关阅读:
    vim 源码分析
    Crontab无法自动执行,直接运行脚本却能执行
    chromium源代码下载(Win7x64+VS2013sp2, 39.0.2132.2)
    linux 环境变量设置方法总结(PATH/LD_LIBRARY_PATH)
    Linux 的源码安装工具 CheckInstall
    两个开源项目要搞定
    FreeRADIUS + MySQL 安装配置笔记
    Linux指令详解useradd groupadd passwd chpasswd chage 密码修改
    Github上的几个C++开源项目
    linux 中解析命令行参数(getopt_long用法)
  • 原文地址:https://www.cnblogs.com/xjf125/p/4728601.html
Copyright © 2011-2022 走看看