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

     结果输出如下:

  • 相关阅读:
    多进程 与并发
    socket之 udp用法 dns 多道 进程
    粘包
    socket tcp
    数据集特点
    secureCRT
    算法
    auto-encoder小记
    pytorch dataloader num_workers
    CNN试验记录
  • 原文地址:https://www.cnblogs.com/xjf125/p/4728601.html
Copyright © 2020-2023  润新知