Objective-C语言使用的是"消息结构"而非"函数调用"

"消息结构"和"函数调用"之间的区别

  • "消息结构"的语言: 运行时由运行环境决定所应执行的代码

  • "函数调用"的语言: 由编译器决定

//Messaging (Objective-C) 消息结构
Object *obj = [Object new];
[obj performWith:parameter1 and:parameter2]; //Function calling (C++)方法调用
Object *obj = new Object;
obj->perform(parameter1,parameter2);

内存模型:Objective-C语言中的指针是用来指示对象的

  • Objective-C为C语言添加了面向对象特性,是其"超集",C语言的所有功能在编写OC代码时依然适用!

  • Objective-C语言中的指针是用来指示对象的。

  • 对象所占内存总是分配在"堆空间"(heap space)中,不能在栈(stack)中分配对象。

NSString *someString = @"the string";
/**说明:
上面代码是声明一个名为someString的变量,类型是NSString *。看就是说,此变量为指向NSString的指针。
Objective-C对象所占内存分配在“堆空间”中,绝对不会分配在“栈”上。
所以someString变量指向分配在堆里的某块内存,其中含有一个NSString对象。
*/
//再创建一个变量,令其指向同一地址,那么并不拷贝对象,只是这两个变量会同时指向此对象
NSString *anotherString = someString; /**说明:
两个NSString *类型变量指向一个NSString实例。
当前“栈帧”里分配两块内存,每块内存大小都能容下一枚指针。(在32位架构计算机是4字节,64位架构计算机是8字节)。这两块内存里的值都一样,都是NSString实例的内存地址。
*/

  • 分配在堆中的内存必须直接管理,Objective-C是通过"引用计数"这一内存管理架构来管理,而分配在栈上用于保存变量的内存则会在其栈帧弹出时自动清理。

  • Objective-C定义的不含*的变量通常是非对象类型的变量(基本数据类型和结构体)。他们使用的是"栈空间"(stack space)

struct CGRect {
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;

要点

  • Objective-C为C语言添加了面向对象特性,是其超集。

  • Objective-C使用动态绑定的消息结构,也就是说,在运行时才会检查对象类型。

  • 接受一条消息之后,究竟应执行何种代码,由运行期环境而非编译器来决定。

最新文章

  1. 转载《Android-TabHost 选项卡功能用法详解》
  2. 报课系统APP
  3. json解析转map
  4. 关于Android构建
  5. Windows 下对目录建立软链接
  6. 《同一个类中不同方法之间的调用相关问题(省略的类名或者this)》
  7. Python笔记本
  8. Java GUI 画点
  9. nrf51822蓝牙芯片ble_app_proximity程序总结
  10. windows下eclipse+hadoop2
  11. [转] PostgreSQL学习手册(数据表)
  12. Mac Python路径总结
  13. Android Studio如何设置自己主动提示代码
  14. Quartz (一)
  15. python面向对象进阶
  16. Windows下配置 Nginx + PHP
  17. DRF 商城项目 - 用户操作(收藏, 留言, 收货地址)
  18. Vue-admin工作整理(十七):Mock模拟Ajax请求
  19. webview 向右滑动关闭时,怎么禁止此 webview 上下滚动?
  20. 《SQL Server从入门到精通》

热门文章

  1. .NET Core 微信小程序支付——(统一下单)
  2. PyCharm 安装常用设置
  3. PyTorch在笔记本上实现CUDA加速
  4. Hbase 日常运维
  5. HBase shell scan 模糊查询
  6. 最大公共子序列(Runtime faster than 92.73% of Python3)
  7. Python3 爬虫之 Scrapy 核心功能实现(二)
  8. Node.js之异步编程
  9. python excel to mysql
  10. ActiveMQ+ZooKeeper搭建高可用集群