最近在看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. Java-编写一个jdbc操作类

    1.通过读取文件配置 package 数据库操作类; /* * Db.java Created on 2007年8月20日, 上午 8:37 */ import java.io.*; import j ...

  2. 你也可以当面霸-Servlet与JSP的原理及特点

    既然是面试系列,就是面试官和应聘者之间的对话.本文是采用一问一答的形式呈现给读者的,这样能有一个明确的考察点,不像理论知识那么枯燥. 01.什么是Servlet技术 Servlet是和平台无关的服务器 ...

  3. Java获取各种常用时间方法大全

    Java获取各种常用时间方法大全 package cc.javaweb.test; Java中文网,Java获取各种时间大全 import java.text.DateFormat; import j ...

  4. BZOJ2463 谁能赢呢?

    Description   小明和小红经常玩一个博弈游戏.给定一个n×n的棋盘,一个石头被放在棋盘的左上角.他们轮流移动石头.每一回合,选手只能把石头向上,下,左,右四个方向移动一格,并且要求移动到的 ...

  5. 从ICLassFactory 为 CLSID的COM组建创建实例失败:c001f011

    在sqlserver创建计划任务的时候,保存时出现:“从ICLassFactory 为 CLSID的COM组建创建实例失败:c001f011”. 解决方法:在运行sqlserver时,使用“以管理员身 ...

  6. POJ 1469 COURSES

    COURSES Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20478   Accepted: 8056 Descript ...

  7. jQueryEasyUI DateBox的基本使用

    http://www.cnblogs.com/libingql/archive/2011/09/25/2189977.html 1.基本用法 代码: 1 2 3 4 5 6 7 8 9 10 11 1 ...

  8. Ext.Net学习笔记24:在ASP.NET MVC中使用Ext.Net

    在前面的笔记中已经介绍了如何在ASP.NET WebForm中使用Ext.Net,由于这个系列一直在WebForm中使用,所以并没有涉及到ASP.NET MVC中的用法. 如果你要在ASP.NET M ...

  9. UVa OJ 140 - Bandwidth (带宽)

    Time limit: 3.000 seconds限时3.000秒 Problem问题 Given a graph (V,E) where V is a set of nodes and E is a ...

  10. Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/dyld_sim is not owned by root.

    sudo chown -R root /Applications/Xcode6.1.1.app/ 这里把这个 /Applications/Xcode6.1.1.app/替换成你xocde据在的位置