zoukankan      html  css  js  c++  java
  • Objective-C 和 C++中指针的格式和.方法 和内存分配

    最近在看cocos2d-x,于是打算复习一下C++,在这里简单对比下,留个念想。

    先看看oc中指针的用法

    @interface ViewController : UIViewController
    {
        int value1;
    }
    
    @property (nonatomic) int value2;
    
    @end
    
    @implementation ViewController
    @synthesize value2;
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        
        self.value2 = 2;
        self->value2 =2;    
        (*self).value2 = 2;
        value2 =2 ;
        
      //  self.value1 = 1;  //error
        self->value1 = 1;
        (*self).value1 = 1;
        
    }
    
    
    
    @end

    从这里看出OC中的对象指针拥有和C和C++指针相同的功能,都可以通过(*p).   或者 ->   2种方式对指针解除引用,并取得对应结构体或对象的信息。

    但是需要注意,在oc中的对象名后边直接使用 操作符可是和前种语言完全不同的 ,比如这里的 self.value2 = 2。具体不同点如下:

    首先,在OC中对象后直接使用.操作符,是不能接方法名称的,这一点和C++不同。

    第二,在oc中对象后直接使用.操作符接成员变量的话,是对应get和set方法的调用的简便写法,你甚至可以重写get和set方法,使这个操作与成员变量毫无关系,这一点还可以帮助我们做些事情,请参与我的另一篇文章iOS category中的所谓属性 和 从xib初始化对象的方法 以及类扩展 。C和C++就是对相应的成员变量进行操作。这里顺便说一下,java的. 操作更像C++的操作,不会自动调用相应get和set方法,java仅仅是对属性的访问。

    另外,在oc中,需要注意以下情况:

     上边的代码中,单单使用了NSString类型来定义a变量,抽象一下就是 类名+变量名 ,编译器就报错了。在C++中这种写法是正确的(java 中就没有指针这一说,当然也是正确的写法了,虽然C++和java都可以,但是含义不同。c++是定义了一个对象,而java仅仅定义了一个类似于指针的句柄,不知道这里用句柄合适不,java中还需要把它指向具体对象才行!)。在stackoverflow上找到了以下解释:

    "Statically allocated" in this case would mean that the memory for that object was allocated at compile-time. All objects in Obj-C, however, are allocated at runtime and accessed through pointers.

    其实,就是oc和java只能动态地分配内存,即在runtime时分配内存,在编译期间,是无法得到对象类型,也就不能正确地分配内存了。是这样吗?

  • 相关阅读:
    python-day24(模块语法)
    python-day23(正则表达式,RE)
    python-day22(序列化)
    python-day21(模块初级)
    python-day20(继承)
    python-day19(约束和异常处理)
    python-day18(反射)
    延迟任务
    亚马逊服务器创建root用户
    sqlalchemy orm
  • 原文地址:https://www.cnblogs.com/breezemist/p/3548094.html
Copyright © 2011-2022 走看看