最近在看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. 只用js 实现的简约聊天框

    之前看到别人的网页打开后都有个聊天框,可以与同时在网上的网友聊点简单话题,于是便找了个最简单的方法 使用js,客户端 打开页面,不断的给服务器发送请求来得到 新的消息 用JavaScript实现的轮询 ...

  2. ZOJ 3430 Detect the Virus

    传送门: Detect the Virus                                                                                ...

  3. Android 实现卫星菜单(精简版)

    MainActivity.java public class MainActivity extends AppCompatActivity { private ArcDemo mArc; privat ...

  4. linux学习之用户管理

    用户管理是在root用户下进行相关操作的 1.配置文件路径:         保存用户信息的文件:/etc/passwd         保存密码的文件:/etc/shadow         保存用 ...

  5. linux下使用 Tomcat 的几个坑

    总结:用sudo su - 后的身份启动tomcat,可选用 bin下的  ./catalina.sh run命令以显示启动过程中可能的报错信息 1.普通用户是无法使用0~1023的熟知端口的,需要 ...

  6. iOS 刚刚,几分钟前,几小时前,几天前,几月前,几年前

    - (NSString *)compareCurrentTime:(NSDate*) compareDate { NSTimeInterval timeInterval = [compareDate ...

  7. [LeetCode] Binary Tree Preorder/Inorder/Postorder Traversal

    前中后遍历 递归版 /* Recursive solution */ class Solution { public: vector<int> preorderTraversal(Tree ...

  8. 详细解析Java中抽象类和接口的区别

    在Java语言中, abstract class 和interface 是支持抽象类定 义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和in ...

  9. Tools下的mdscongiguer 文件中 43行 oracle 配置 发现需要连接库 -lclntsh libclntsh.so 库是个什么东西呢?

    Tools下的mdscongiguer     文件中 43行  oracle 配置      发现需要连接库 -lclntsh      libclntsh.so 库是个什么东西呢? 分想一个知乎网 ...

  10. jquery源码分析-工具函数

    jQuery的版本一路狂飙啊,现在都到了2.0.X版本了.有空的时候,看看jquery的源码,学习一下别人的编程思路还是不错的. 下面这里是一些jquery的工具函数代码,大家可以看看,实现思路还是很 ...