52个有效方法(1) - 了解Objective-C语言的起源
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使用动态绑定的消息结构,也就是说,在运行时才会检查对象类型。
接受一条消息之后,究竟应执行何种代码,由运行期环境而非编译器来决定。
52个有效方法(1) - 了解Objective-C语言的起源的更多相关文章
- 第一章 熟悉Objective -C 编写高质量iOS与OS X代码的52 个有效方法
第一章 熟悉Objective -C 编写高质量iOS与OS X代码的52 个有效方法 第一条: 了解Objective-C 语言的起源 关键区别在于 :使用消息结构的语言,其运行时所应执行 ...
- iOS书摘之编写高质量iOS与OS X代码的52个有效方法
来自<Effective Objective-C 2.0编写高质量iOS与OS X代码的52个有效方法>一书的摘要总结 一.熟悉Objective-C 了解Objective-C语言的起源 ...
- 笔记 《Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法 》
阅读此书的笔记点: 此书目录即是对知识点最好的总结 第1章 熟悉Objective-C ---------------------------------------------- 第1条:了解Obj ...
- 《编写高质量iOS与OS X代码的52个有效方法》书籍目录
一.熟悉Objective-C 1.了解Objective-C语言的起源 2.在类的头文件中尽量少引入其他头文件 3.多用字面量语法,少用与之等价的方法 4.多用类型常量,少用#define预处理指令 ...
- 编写高质量iOS代码的52个有效方法2-1
一.变量的定义位置(用{}声明示例变量或者用@property属性声明实例变量) 1.用{}声明示例变量: 此方法生命的实例变量,编译器在编译时,会自动计算其偏移量(表示该变量距离存放对象的内存区域的 ...
- 编写高质量iOS代码的52个有效方法1-1
一.使用向前声明(@class)的好处 1.有效减少编译器编译的时间: 2.有效避免循环引用: 二.字面量语法的好处 1.字面常量 精简.可用于所有数据类型,如: NSNumber *intNumbe ...
- 编写高质量iOS与OS X代码的52个有效方法
第一章重点: 第一条:OC的起源 OC由smalltalk语言演化而来的语言为消息结构(messaging structure)语言,其运行时所因执行的的代码由运行环境来决定:函数调用(functio ...
- 52个有效方法(4) - 多用类型常量,少用#define预处理指令
局部常量 在实现文件中使用 static const 来定义"只在编译单元内可见的常量"(translation-unit-specific constant).其命名规则为在前面 ...
- 【读书笔记】--《编写高质量iOS与OS X代码的52个有效方法》
1.Objective-C 起源: 在 C 语言基础上添加了面向对象特性,是 C 语言的超集.Objective-C 由 SmallTalk 语言演变过来,使用消息结构,运行环境由运行环境决定. OC ...
随机推荐
- Linux下设置path
1.直接用export命令: #export PATH=$PATH:自定义路径 查看是否已经设好,可用命令export查看: 2.修改profile文件: #vi /etc/profile 在里面加入 ...
- Go语言基础之并发
并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发,这也是Go语言流行的一个很重要的原因. Go语言中的并发编程 并发与并行 并发:同一时间段内执行多个任务(你在用微信和两个女朋友聊天) ...
- golang时间转换
1.datetime转换成时间字符串 package main import ( "fmt" "reflect" "time" ) func ...
- android 实现 波纹效果+图片左右无限滑动缩放效果
项目中用到的 ,记录下.说不定下次又用到了.就提取出来了. 录制效果一般,将就看吧.代码地址如下 https://yunpan.cn/ckQaXMpYwdUnn (提取码:7ac7)
- centos开启nginx服务成功,却无法访问。没有开启80端口。centos配置防火墙 开启80端口
Linux配置防火墙 开启80端口 编辑配置文件/etc/sysconfig/iptables [root@weixinht ~]# vim /etc/sysconfig/iptables 1 # F ...
- SpringBoot和Hibernate整合
1.先使用idea创建maven项目(这个就不详细讲了,很简单的操作) 2.创建完maven项目之后添加springboot依赖,pom.xml文件如下: <?xml version=" ...
- 使用 Eslint & standard 规范前端代码
前言 JavaScript的动态语言类型,给它带来了独特的魅力,产生了风格多样的开发范式,同时也带来了一些问题,从运行时常见的 undefined .null 报错,到代码随意的加减分号.换行.空格, ...
- 生物医学命名实体识别(BioNER)研究进展
生物医学命名实体识别(BioNER)研究进展 最近把之前整理的一些生物医学命名实体识别(Biomedical Named Entity Recognition, BioNER)相关的论文做了一个Bio ...
- Selenium+python操作id为动态变化的frame(iframe)
先定位到一组frame:ele = dr.find_elements_by_tag_name('iframe')此时获得一组frame 再通过index取需要切进去的frame并取到该frame的id ...
- 暑期——第四周总结(Ubuntu系统安装新版eclipse双击无法打开问题 【已解决】)
所花时间:7天 代码行:200(python)+3000(java) 博客量:1篇 了解到知识点 : Ubuntu安装新eclipse 在通过软件中心安装好eclipse之后,发现各种东西都不顺眼,不 ...