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

     结果输出如下:

  • 相关阅读:
    http://blog.csdn.net/steveguoshao/article/details/38414145
    http://www.tuicool.com/articles/EjMJNz
    http://jingyan.baidu.com/article/7f41ecec1b7a2e593d095ce6.html
    Linux 查看当前时间和修改系统时间
    http://m.blog.csdn.net/article/details?id=49132747
    http://www.cnblogs.com/nick-huang/p/4848843.html
    javaScript事件(一)事件流
    jQuery选择器
    超链接a的target属性
    html基础总结版
  • 原文地址:https://www.cnblogs.com/xjf125/p/4728601.html
Copyright © 2011-2022 走看看