1.了解Objective-C语言

了解Objective-C语言

** Objective-C 语言是“消息结构”(messaging structure) 类似C++ 、Java 是“函数调用”(function calling)**

// messaging structure (Objective-C)
Object *obj = [Object new];
[obj performWith:parameter1 and:parameter2];

// function calling (C++)
Object *obj = new Object;
obj->perform(parameter1,parameter2);
  • 区别在于:使用消息结构的语言,其运行时所应执行的代码由运行环境决定,函数调用的语言,由编译器决定。
  • 消息结构执行的方法,总是在运行时才去查找所要执行的方法,甚至不关心接收消息的对象是何种类型;其过程叫做“动态绑定”。

** Objective-C对象声明 **

// 声明一个名为 someSting 的变量,其类型是 NSString * 。
NSString *someString = @"The String";

// 此 someSting 为指向NSString 的指针。
  • 所有 Objective-C 语言的对象都必须像以上声明,因为对象所占==内存==总是分配在“堆空间”,而绝不会分配在“栈”上。不能在栈中分配 Objective-C 对象。
NSString someString;
// error :interface type cannot be statically allocated
  • 有时会遇到定义不含 * 的变量,他们可能会使用“栈空间”,这些变量所保存的不是Objective-C对象。比如 CGRect;
CGRect frame;
frame.origin.x = 0.0f;
frame.origin.y = 10.0f;
frame.size.width = 100.0f;
frame.size.height = 150.0f;

// CGRect 是 C 结构体,其定义是:
struct CGRect {
    CGPoint origin;
    CGSize size;
};
type struct CGRect CGRect; 
  • 整个系统架构都在使用这种结构体,因为如果改用 对象来做的话,性能会受影响。与创建结构体相比,创建对象还需要额外开销,例如分配及释放堆内存等,如果只需保存 int、float、double、chat、等“非对象类型”,那么通常使用CGRect这种结构体就可以了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员Gank

《Objective-C-高级编程》干货三部曲(二):Blocks篇

这一章讲解了Block相关的知识。因为作者将Objective-C的代码转成了C++的代码,所以第一次看的时候非常吃力,我自己也不记得看了多少遍了。

1161
来自专栏机器学习算法与Python学习

一文读懂Python中的异常处理

1186
来自专栏AI星球

值得玩味儿的14个Python编程小技巧

最近的工作中经常使用Python编写一些基本解决一些NLP的小问题,在自己的工作日记里面也记录了不少的python编程中常用的小"Trick",看到最近大...

1092
来自专栏从零开始学自动化测试

pytest文档11-assert断言

断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了。什么是断言呢? 简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass...

1294
来自专栏Python小屋

详解Python序列解包(5)

如果一个函数需要以多种形式来接收参数,定义时一般把位置参数放在最前面,然后是默认值参数,接下来是一个星号的可变长度参数,最后是两个星号的可变长度参数;调用函数时...

2654
来自专栏雨尘分享

3. __block  __weak  __strong   这都是做什么的

1893
来自专栏Hongten

java中的Integer的toBinaryString()方法

在一次面试的过程中,遇到过这样的题目,题目的大概意思是:让写出Integer类中的toBinaryString()方法

812
来自专栏静晴轩

Lua代码片段收集

Lua实现闭包 --[[@Func :实现闭包 @Desc : 当一个函数内部嵌套另一个函数定义时,内部的函数体可以访问外部的函数的局部变量,这种特征...

3165
来自专栏前端布道

ECMAScript 6入门 - let和const命令详解

let命令 基本用法 ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。 'use strict'...

3075
来自专栏学海无涯

25.Swift学习之@objc

在 Swift 中很多地方都是用到了一个修饰符@objc,尤其是在混编项目中,出于安全的考虑,可以将需要暴露给 Objective-C 使用的如类,属性和方法的...

1091

扫码关注云+社区