读Effective Objective C总结(二)

  1. OC编译器的特性:在声明成员变量时,编译器会产生一个硬编码的偏移量,它表示变量距离存放该对象的内存区域的起始地址的长度。OC把这个偏移量作为类对象的一个特殊变量,在runtime时期查找,就总可以生成正确的偏移量.
  2. @property 属性:在没有进行任何手动操作的前提下,这个属性第一自动生成了getter和setter方法,同时生成了对应属性“_字段”的成员变量
  3. @property中内存管理的语义:

4.关于使用点语法的原则:在初始化方法或者dealloc中,要用成员变量,不要用点语法(不知道为什么);在对象内部访问成员变量,写数据时使用点语法,这样有利于表达内存管理语义,读数据的时候尽量使用_成员变量.

5.在NSObject中,判断两个对象是否相等:调用方法isEqualTo,它的算法分三步:

第一,判断两个对象的指针是否相同

第二,若指针不相同,则判断两个类是否相同

第三, 若类相同,就依次判断各个属性是否相同

这些判断完了之后,则判断哈希码是否相同

时间: 2024-12-19 13:41:44

读Effective Objective C总结(二)的相关文章

读Effective Objective C总结(一)

第一章 Objective C是一种基于消息结构的语言,在查找执行的方法和对象时是在运行时处理 对象的空间分配在堆空间,指向对象的指针分配在栈空间,基本数据类型和结构体也分配在栈空间 在引入头文件时,尽量使用@Class前向声明来提高编译效率 多使用字面量语法,但是在取下标的时候,要注意是否有意义 少使用#define预处理指令,若要在一个文件(当前单元)里使用静态常量,应该这样声明:static const NSTimeInterval kTime,但是这种方法并不能用OC的方法初始化,即必须

读Effective Objective C总结(三)

在collection集合类中如NSSet中是不允许有相同的元素的,但是如果这样写: 这样就会第一个set的输出结果是两个相同的元素,第二个set的输出结果只有一个元素 类族模式:由于在OC中没有抽象基类,因此用工厂模式,比如我们可以用创建UIButton类似的方法:判断某个实例所属的类是否在类族之中,要用isKindOfClass不能用isMemeberOfClass,因为有些类会有内部类型 关联对象的使用,实际上就是在局部空间建立一个通道来共享某些类,如在UIAlert里面共享block 消

读ActiveAndroid源码(二)

上一次粗略地读了一下TableInfo这个类,了解了一下ActiveAndroid中注解的使用方法,算是一个预热,这一篇,从正常的顺序开始. 所以,这次从ActiveAndroid的初始化开始阅读. public class Application extends android.app.Application { @Override public void onCreate() { super.onCreate(); ActiveAndroid.initialize(this); } @Ove

C#读txt文件并写入二维数组中(txt数据行,列未知)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace 二维数组 { class Program { static void Main(string[] args) { int row = 0;//行 int col = 0;//lie FileStream fs; string path = @"C:\Documents an

读懂IL代码(二)

上一篇提到了最基本的IL代码,应该是比较通俗易懂的,所以有了上一篇的基础之后,这篇便要深入一点点的来讲述了. 首先我必须再来说一些重要的概念: Evaluation Stack(评估栈):这是由.NET CLR在执行时候自动管理的记忆体,每一个线程都有自己的评估栈,也就是说,它是用来存储临时变量的线程栈(应该可以这么理解).值类型存储数据,引用类型存储地址. Call Stack(调用栈):这也是由.NET CLR在执行时候自动管理的记忆体,每一个线程都有自己的调用栈,每一次调用method,就

读Redis学C程序设计二:内存分配

内存分配对于C程序来说是一个核心问题,许多开源软件都会针对自己软件的需要定制自己的内存分配策略,redis也不例外.然而总的来说,redis并不是专门去管内存分配的东西,它的内存分配策略的最大特点在于加上了统计信息,这一点很重要.毕竟,redis是一个内存数据库,知道自己用了多少内存,还有多少内存可用是它非常需要关注的问题.我们来看zmalloc里面的内容. 首先在zmalloc.h里面 #if defined(USE_TCMALLOC) #define ZMALLOC_LIB ("tcmall

Effective Objective -C 第一章 熟悉iOS

Objective-C 使用的是"消息结构",使用消息结构与函数调用的语言关键区别在于:使用消息结构的语言,其运行时所应执行的代码由运行环境来决定:而使用函数调用的语言,则有编译器决定. 运行期组件(runtime component)----动态库(dynamic library)Objective-C是C语言的"超集"(superset),OC中的指针是用来指示对象的.OC使用的动态绑定的消息结构,也就是说,在运行时才会检查对象类型.接受到消息之后,究竟应执行何

你不知道的二维码扫描模组、二维码读头行业应用?

随着二维码识别技术的发展,近些年以二维码扫描模组为核心扫码硬件无论是生活还是工作,都给我们带来了前所未有的改变.设备扫描读取乘车码乘坐公交地铁.在自助机上刷支付宝微信付款码实现二维码支付等一系列O2O智能设备都离不开它.二维码扫描模组也称为二维码读头(或嵌入式二维码扫描器),可实现对纸质条码/屏幕二维码信息进行扫描和解码,接下来我们就来了解一下它有哪些热门行业应用呢?以便于帮助正在挑选二维码扫描器(嵌入式系列)的集成商客户的您有所帮助. (1)应用于公共交通扫码收费:嵌入集成到公交扫码支付.闸机

effective java读书笔记1——创建和销毁对象

今天刚开始读effective java,中文版的读起来很拗口,但感觉收获很多. 另外,这本书的内容是针对Java 1.5和1.6的. 在这里整理一下第2章:创建和销毁对象 的内容. 第一条:考虑用静态工厂方法代替构造器 这一条针对的情景是要获得类的实例时.一般说来,想要获得类的实例,都是通过构造函数(书里叫做构造器). 最常见的构造函数是这样的,没有返回参数,名字和类名相同. public class A{ public A(int a){ //构造函数内容 ... } } 而所谓的静态工厂,