最近在看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 = ;
self->value2 =;
(*self).value2 = ;
value2 = ; // self.value1 = 1; //error
self->value1 = ;
(*self).value1 = ; } @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时分配内存,在编译期间,是无法得到对象类型,也就不能正确地分配内存了。是这样吗?

Objective-C 和 C++中指针的格式和.方法 和内存分配的更多相关文章

  1. 关于pyhton中的__xxx__格式的方法与变量的理解

    python中类似__xx__的方法和变量是python系统内定义的方法和变量,都是具有特殊意义的基础变量和方法,一般不要擅自使用,除非知道自己在干什么. 具体查看python内置模块builtins ...

  2. PHP-PHP5.3及以上版本中检查json格式的方法

    function is_json($string) { json_decode($string); return (json_last_error() == JSON_ERROR_NONE); } j ...

  3. 【Linux】windows下编写的脚本文件,放到Linux中无法识别格式

    注意:我启动的时候遇到脚本错误 » sh startup.sh -m standalone tanghuang@bogon : command not found : command not foun ...

  4. Java中对象并不是都在堆上分配内存的

    转(https://blog.51cto.com/13906751/2153924) 前段时间,给星球的球友们专门码了一篇文章<深入分析Java的编译原理>,其中深入的介绍了Java中的j ...

  5. (转载)图解Java多态内存分配以及多态中成员方法的特点

    图解Java多态内存分配以及多态中成员方法的特点   图解Java多态内存分配以及多态中成员方法的特点   Person worker = new Worker(); 子类实例对象地址赋值给父类类型引 ...

  6. 栈 堆 stack heap 堆内存 栈内存 内存分配中的堆和栈 掌握堆内存的权柄就是返回的指针 栈是面向线程的而堆是面向进程的。 new/delete and malloc/ free 指针与内存模型

    小结: 1.栈内存 为什么快? Due to this nature, the process of storing and retrieving data from the stack is ver ...

  7. 用Delphi从内存流中判断图片格式[转]

    http://blog.163.com/tfn2008%40yeah/blog/static/110321319201222243214337/ 用Delphi从内存流中判断图片格式[转] 2012- ...

  8. Java中“指针”的解释以及对“引用”的理解

    Java中"指针"的解释以及对"引用"的理解 初学Java面对对象编程,对于一些概念还真的有点难以理解,主要是因为不由自主的联系到以前学过的C语言知识,时不时的 ...

  9. 如何在latex 中插入EPS格式图片

    如何在latex 中插入EPS格式图片 第一步:生成.eps格式的图片 1.利用visio画图,另存为pdf格式的图片 利用Adobe Acrobat裁边,使图片大小合适 另存为.eps格式,如下图所 ...

随机推荐

  1. Maven-环境快速搭建

    Jdk  1.5以上java开发环境. Eclipse IDE 一个. Maven 3.0.3下载地址: http://maven.apache.org/docs/3.0.3/release-note ...

  2. oracle-分页查询方案

    一.使用rownum做三层包装查询(常用方案) SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A ) 其中 ...

  3. 【CodeForces 602C】H - Approximating a Constant Range(dijk)

    Description through n) and m bidirectional railways. There is also an absurdly simple road network — ...

  4. BZOJ3732 Network

    Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: d_ ...

  5. 如何使用lessc编译.less文件

    LESS :一种动态样式语言. LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承, 运算, 函数. LESS 既可以在 客户端 上运行 (支持IE 6+, Webkit, Firefox) ...

  6. poj 1442 名次树

    这回要求的是第k小的元素, 参考了ljl大神的模板,orz //insert 插入 //remove 删除 //_find 查找 //kth 返回root为根的树中第k小的元素 //treap插入.删 ...

  7. 洛谷P1082 同余方程

    题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正 ...

  8. [Angularjs]单页应用之分页

    写在前面 在项目中,用到单页应用的分页,当时想到使用滚动加载的方案,可是几次尝试都没配置成功,闲着无聊就弄了一个demo. 系列文章 [Angularjs]ng-select和ng-options [ ...

  9. --Dirring love 音乐(01背包问题)

    解题思路: dp[i][j] 前 i 首歌放入 j 容量中的最大热情度. 前 i 首歌 放到 j 容量中 dp[i][j]= dp[i-1][j-m[i]]+r[i]   (注意:如果 j 容量 &l ...

  10. MySQL中varchar类型在5.0.3后的变化

    1.mysql varchar类型变化:mysql 5.0.3 之前: 0--255字节 varchar(20)中的20表示字节数,如果存放urf8编码的话只能放6个汉字. MySQL 5.0.3 之 ...