关于Objc中的类和元类——《Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法》读后感

我觉得EffectiveOC(暂且简称为EffectiveOC)这本书主要针对iOS开发中的一些常见问题和需要注意的地方供一些建议,但是每个点讲的比较深入,不仅告诉你这样做,并且从底层上讲解why,从讲解的why上我对OC有了更多的理解,这里做一点分享,也算做懒人的一种笔记吧.
最近又翻开关于类和元类这个有点鸡生蛋的问题(~~),到底这个元类和类是什么关系呢?我找到那张有名的 class diagram 图的原文,查看了一下。

一、 EffectiveOC目录

优化Objective-C对象之间的互动与关系.
掌握接口与API的设计原则,写出令开发者用起来得心应手的类.
善用协议与分类,编写便于维护且不易出现bug的代码.
在自动引用计数(ARC)环境下避免内存泄漏.
用”块”与”大中枢派发”编写呈模块化且功能强大的代码.
理解Objective-C中的协议与其他编程语言中的多重继承有何区别,并掌握协议的用法.
通过数组、字典、集合等组合对象来提高代码性能.
揭示Cocoa与Cocoa Touch框架的强大之处.

二、 进一步熟悉内存机制

1
NSString *str = [[NSString alloc] initWithString:@"This is a string"];

常说的实例对象其实是指向对象内存地址的指针。
实例对象.png

阅读更多
准备读的健身书籍

训练

**1. ** 躯干跑步法 (已读)


躯干跑步法.jpg

阅读更多
内存管理【翻译】

引言(Introduction)

关于内存管理(About Memory Management)

应用程序的内存管理是程序在运行时分配内存的过程,运行它,使用完时将其释放。一个好的程序将使用尽可能小的内存。在Objective-C中,它也可以被视为多个数据和代码分配有限内存资源的所有权。当您学习完本指南时,你将有拥有所需要的管理你应用程序内存的知识,如清楚地知道如何管理对象的生命周期,并在它们不再使用时释放掉。
虽然内存管理通常在考虑一个单独的对象的层次,但是你的目标实际上是管理对象的整个周期图表。你要确保在内存中没有不需要的对象。
memory_management_2x.png

一眼看去

Objective-C提供了两种应用程序的内存管理方法。

  1. 在本指南中描述的方法,称为“手动保留释放”或MRR,您通过跟踪你的对象来明确地管理内存。这是用一个模型来实现,称为引用计数,结合运行时环境,由基础框架类NSObject所提供。
  2. 自动引用计数,或者ARC,该系统使用相同的引用计数系统MRR,但它会在编译期为你插入适当的内存管理方法调用。强烈建议在新项目中使用ARC。如果您使用的是ARC,通常不需要了解本文档中所描述的基本实现方法,尽管它可能在某些情况下是有用的。更多关于ARC,参考过渡到ARC释放笔记
阅读更多
TableView系列--知识点

变更记录

序号 | 录入时间 | 备注
— | — | — | —
1 | 2016-09-06 | 新建文章
2 | 2018-04-14 | 合并整理
3 | 2018-05-29 | 整理目录

TableViewCell知识重点

每个TableViewCell里带一个contentView,cell的textLabel和imageView都是加载在contentView里的,所以以后要在cell上添加控件最好在contentView上添加,以免不必要的错误。

contentView.png

创建自定义TableViewCell

  1. 首先调用cellForRowAtIndexPath方法,如果是加载nib可以在ViewDidLoad中先注册nib文件的cell:
1
2
UINib * nib = [UINib nibWithNibName:NSStringFromClass([MZTableViewCell class])  bundle:nil];
[self.tableView registerNib:nib forCellReuseIdentifier:@"mzCellNib"];
  1. 然后从缓存池里查找
1
2
static NSString *reuseID = @"mzCellNib";
MZTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseID];
  1. 如果storyboard中有cell的话,设置storyboard中cell的重用标识,在缓存池中也能找到:

storyboard设置cell.png

阅读更多
对iOS浅拷贝,深拷贝的理解

做iOS开发的需要学习内存管理,有一些概念在工作和面试中常常遇到:什么是深拷贝,什么是浅拷贝? mutableCopycopy有什么区别? 为啥NSString通常是copy?感觉网上一些资料讲的不是很清楚,这里说明几点:

1. 什么是浅拷贝、深拷贝?

A: 简单理解就是,浅拷贝是拷贝了指向对象的指针, 深拷贝不但拷贝了对象的指针,还在系统中再分配一块内存,存放拷贝对象的内容。

阅读更多