zoukankan      html  css  js  c++  java
  • Objective

    之前, 我们已经讲了一些关于OC, 还有编译器的一些特性, 比如@property@synthesize, 这次我们来说说新的特性, 而这个特性就只能运用在OC对象中, 下面让我们一起来看看~~



    例子:

    #improet <Foundation/Foundation.h>
    
    @interface Person : NSObject
    @end
    
    @implementation Person
    @end
    
    int main()
    {
    	Person *p = [Person new];
    
    	NSObject *n = [Person new];
    
    	return 0;
    }

    以往我们创建对象, 都是使用上面这两种创建方式, 一种是直接创建, 一种是多态语法创建, 但今天我们有了第三种创建方式, 那就使用关键字 " id " .


    #improet <Foundation/Foundation.h>
    
    @interface Person : NSObject
    @end
    
    @implementation Person
    @end
    
    int main()
    {
    	Person *p = [Person new];
    
    	NSObject *n = [Person new];
    
    	id i = [Person new];
    
    	return 0;
    }



    为什么id也可以创建呢? 其实id在OC中是属于万能指针, 可以操作任何的OC对象.

    #improet <Foundation/Foundation.h>
    
    @interface Person : NSObject
    
    @property int age;
    
    @end
    
    @implementation Person
    @end
    
    int main()
    {
    	Person *p = [Person new];
    
    	NSObject *n = [Person new];
    
    	id i = [Person new];
    
    	i.age = 10;
    
    	return 0;
    }

    这是完全没有问题的, 因为id 这个指针就相当于" NSObject * ", 所以使用id来创建对象, 其实就相当于使用了多态语法.



    在函数中也可以使用:

    #improet <Foundation/Foundation.h>
    
    @interface Person : NSObject
    
    @property int age;
    
    @end
    
    @implementation Person
    void test(id d)
    {
    	
    }
    @end
    
    int main()
    {
    
    	return 0;
    }

    这个的意思就是, 只要你传入的是对象, 无论是什么对象, 一样可以在函数里使用.




    当然, 方法也同样可以这么做:

    #improet <Foundation/Foundation.h>
    
    @interface Person : NSObject
    
    @property int age;
    - (void)test:(id)d;
    @end
    
    @implementation Person
    - (void)test:(id)d
    {
    	
    }
    @end
    
    int main()
    {
    
    	return 0;
    }




    成员变量也是如此:

    #improet <Foundation/Foundation.h>
    
    @interface Person : NSObject
    
    @property id age;
    
    @end
    
    @implementation Person
    @end
    
    int main()
    {
    	return 0;
    }



    但在成员变量使用id需要注意一些事情, 比如你写的成员变量名是age, 但是你给这个成员变量赋的值却是字符串, 那就不太合逻辑了, 这一点小细节还是需要注意的.





    好了, 这次我们就讲到这里, 下次我们继续~~~


  • 相关阅读:
    【BZOJ】2019: [Usaco2009 Nov]找工作(spfa)
    【BZOJ】3668: [Noi2014]起床困难综合症(暴力)
    Redis 字符串结构和常用命令
    Redis实现存取数据+数据存取
    Spring 使用RedisTemplate操作Redis
    使用 java替换web项目的web.xml
    SQL server 从创建数据库到查询数据的简单操作
    SQL server 安装教程
    IntelliJ IDEA 注册码(因为之前的地址被封杀了,所以换了个地址)
    对程序员有帮助的几个非技术实用链接(点我,你不会后悔的)
  • 原文地址:https://www.cnblogs.com/iOSCain/p/4282840.html
Copyright © 2011-2022 走看看