zoukankan      html  css  js  c++  java
  • 1.了解Objective-C语言

    了解Objective-C语言

    ** Objective-C 语言是“消息结构”(messaging structure) 类似C++ 、Java 是“函数调用”(function calling)**

    // messaging structure (Objective-C)
    Object *obj = [Object new];
    [obj performWith:parameter1 and:parameter2];
    
    // function calling (C++)
    Object *obj = new Object;
    obj->perform(parameter1,parameter2);
    
    • 区别在于:使用消息结构的语言,其运行时所应执行的代码由运行环境决定,函数调用的语言,由编译器决定。
    • 消息结构执行的方法,总是在运行时才去查找所要执行的方法,甚至不关心接收消息的对象是何种类型;其过程叫做“动态绑定”。

    ** Objective-C对象声明 **

    // 声明一个名为 someSting 的变量,其类型是 NSString * 。
    NSString *someString = @"The String";
    
    // 此 someSting 为指向NSString 的指针。
    
    • 所有 Objective-C 语言的对象都必须像以上声明,因为对象所占内存总是分配在“堆空间”,而绝不会分配在“栈”上。不能在栈中分配 Objective-C 对象。
    NSString someString;
    // error :interface type cannot be statically allocated
    
    • 有时会遇到定义不含 * 的变量,他们可能会使用“栈空间”,这些变量所保存的不是Objective-C对象。比如 CGRect;
    CGRect frame;
    frame.origin.x = 0.0f;
    frame.origin.y = 10.0f;
    frame.size.width = 100.0f;
    frame.size.height = 150.0f;
    
    // CGRect 是 C 结构体,其定义是:
    struct CGRect {
    	CGPoint origin;
        CGSize size;
    };
    type struct CGRect CGRect; 
    
    • 整个系统架构都在使用这种结构体,因为如果改用 对象来做的话,性能会受影响。与创建结构体相比,创建对象还需要额外开销,例如分配及释放堆内存等,如果只需保存 int、float、double、chat、等“非对象类型”,那么通常使用CGRect这种结构体就可以了。
  • 相关阅读:
    java面试第八天
    java面试第七天
    java面试第六天
    java面试第五天
    java面试第四天
    SpringMVC导出Excel
    75. Autorelease机制及释放时机
    关于 SQLNET.AUTHENTICATION_SERVICES 验证方式的说明
    硬件十万个为什么——运放篇(五)PCB设计技巧
    eclipse到Android Studio的项目迁移
  • 原文地址:https://www.cnblogs.com/ShaoYinling/p/8454862.html
Copyright © 2011-2022 走看看