学习 Objective-C大概4个月了,居然给一个还没毕业的家伙吹了吹,呼,希望不要误人子弟。这里总结一下,毕竟这是第一次完整的讲一个东西。

附上PPTObjective-C Primary 。资源99%来自WWDC 2010 session 113。

Common Concepts

Objective-C 相对其他更了解的C++语言来说,还是有些不同的。如下表

这里面有几点比较重要

  1. Objective-C 中所有的类,其实是另一种“类”的对象,所以Objective-C 中的类方法,其实是另一种类的实例方法。 Objective-C Message
  2. Objective-C 中没有静态变量,都是用全局变量实现的。

Category

如何给一个类增加一个函数方法,在C++中是不可能的(或是很难)但是在Objective-C中确实很简单的事情,category 做的就是这件事情。

当第一次看到category 时,我几乎肯定这是一个非常坑爹的设计,因为这个可以完美的覆盖原有类的方法,如果使用不当,绝对是灾难性的错误。但是,随着使用时间变长category 的好处也慢慢体会出来。

  • 给系统原有的类或是第三方的类增加函数,而不用使用一个新的类,这样使用会更加方便,特别是使用IB时,不需要将系统的类换成自己定义的类,这样减少了非常多的移植问题和同步工作。

当然,如果使用不当,也会遇到问题

  • 函数覆盖问题,之前提到过
  • 增加大量的category 会降低系统性能,特别是如果大量的加到一些基础类上,如NSObject 等,因为,几乎整个系统都在使用这些类,而过多的category,不仅降低自己代码的效率,也会降低framework代码的效率,这里的效率,应该主要在类初始化上,和消息发送上面。

SEL

  • 相关的内容在Objective C SEL

Memory Management

语言是离不开平台的,而内存管理,则是了解平台中最基础的部分。而cocoa touch 的内存设计也就是基于引用计数的设计,是针对很早以前的设备设计,显然不适合现在的硬件设备。但是,现在我们似乎没有其他的选择,在一开始学习时。

基于引用计数的内存管理,设计的本质其实就是一个Directed Acyclic Graph(有向无回图)

对于引用计数的内存管理,这一点实在是不陌生,不管是什么语言,都会遇到一个问题,循环引用

当形成回路时,循环引用发生,导致内存泄露。而对应的方法,不管是什么语言,都需要把引用分为强引用和弱引用

解决引用循环的方法很多,但是实质上,都是通过抽象成父子关系来做,一个强引用,一个弱引用,图形下方的节点通过弱引用连接上面的节点,图形上方的节点,通过强引用连接下方节点。实例就是delegate,属性被声明为assign

Autorelease Pools

autorelease 应该是初学者最容易糊涂的地方,一开始我也非常害怕使用Autorelease 变量,因为,这些变量不仅会增大内存开销,而且使用不当,crash的位置就是main函数,调试器几乎没有任何帮助,但是仍然有非常多的framework是基于autorelease 变量的,所以还是需要屡屡。

cocoa touch 是事件驱动的,我们通过接受一个个的event来跑我们的程序,那么简单的讲,就是一个while的死循环,不断地获取一个event,处理一个event。

处理event的时候,framework 帮我们建立了一个autorelease pool。

当我们处理或是叫响应一个event时,比如调用了[NSDate date] 函数,这个函数,返回了一个autorelease 变量d

而这个变量,事实上是被autorelease pool 所引用。

当一层层stack pop 之后,我们可以看到 autorelease 变量的生命周期

当调用[pool drain]后,autorelease pool 随之消失,伴随着还有那个var d,回到原点,在下一个event cycle

转载于:https://www.cnblogs.com/studentdeng/archive/2012/01/12/2320870.html

Objective-C 一些很基础的总结相关推荐

  1. linux用两种方法找到cuond,很基础的Linuxshell脚本学习.doc

    很基础的Linuxshell脚本学习 详细介绍Linux shell脚本基础学习(一) 2010-03-05 10:24 佚名 互联网 我要评论(9) 字号:T | T Linux shell脚本基础 ...

  2. 米哈游的春招实习面经,问的很基础

    米哈游的春招实习面经,主要考察了java+操作系统+mysql+网络,这四个方面. 面试流程,共1小时,1min自我介绍,20min写题,剩下问题基础知识. Java String,StringBui ...

  3. 联发科技嵌入式_【MTK联发科技嵌入式驱动工程师面试】面试官人很好,问的问题很基础。-看准网...

    我是计算机科学方向的本科生.25 号周四联发科 MediaTek 来学校进行提前批招聘了,我就拉着室友一起去了,我们之前刷了之前的笔试题,然后刚好遇到了几道完全一样的几道题目:1. 计算二进制数字位中 ...

  4. 《C#高级编程》 读书心得1--核心C# 几点你可能没注意,但很基础的小东西。

    这是本系列读书心得第一篇. 其实所谓核心C#也就是C#的语法基础,相信大家应该已经非常熟悉了,在这里说一下在书中看到,大家可能平时没有太注意到的.此篇比较基础,也是第一次写读书心得,请勿喷啊. 变量以 ...

  5. NopCommerce开源项目中很基础但是很实用的C# Helper方法

    NopCommerce是啥? nopCommerce是最好的开源电子商务购物 系统.nopCommerce免费提供.今天,它是最好和最流行的ASP.NET电子商务软件.它已被下载超过180万次! no ...

  6. 转载的SSO文章,很基础

    单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了单点登录的需求和应用领域:从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO和桌面 ...

  7. 接上篇,记录一下【Unity 3D对博途PLCSIM的通讯】文章有点长~仔细看,很基础

    本文参考链接:西门子PLC丨PROFINET通讯仿真(虚拟通讯)做了一些更详细的优化,本文使用的类库并非原作者使用的类库. 首先,昨天项目已经创建好了,这边也加了一个InputField和一个Butt ...

  8. 校招八股:C/C++开发工程师常见笔试、面试题目不完全汇总【很基础】

    这里汇总一些C/C++开发岗的常见面试八股题,都属于比较基础.偏理论性的题目.换句话说,如果这些题目答不上来,可能会给面试官留下的基础不好的印象,尤其是科班生哈. 废话不多说,直接开始. 一.C/C+ ...

  9. Objective-c——UI基础开发第十二天(相册展示)

    一.知识点 模仿新特性 UICollectionViewFlowLayout自定义布局 相册 瀑布流(淘宝购物之类的 二.复习 a.UICollectionView 和 tableview共享一套AP ...

最新文章

  1. linux gdb 运行的程序,GDB(十)--调试正在运行的进程
  2. 功放关键规格参数检查
  3. tomcat与tomee_Apache TomEE(和Tomcat)的自签名证书
  4. input文件上传代码片段
  5. Git笔记(13) 分支管理
  6. 新增本地存储功能 山石网科发布下一代防火墙新品
  7. 中心极限定理_中心极限定理和Python图解
  8. 这些年我用过的6个API接口在线管理平台
  9. Windows系统服务器中安装Redis服务
  10. python中文版加密解密_python - 入门-对中英文加密解密
  11. python中pygame学习——碰碰球(简单版)
  12. Android 修改开机画面
  13. Faster R-CNN详解
  14. python不显示边框_python设置表格边框的具体方法
  15. 图像处理学习笔记2.0
  16. 如何快速算出一个数有多少个因子(c++)
  17. 如何看待抖音被降权限流,该怎么挽回账号权重丨国仁网络资讯
  18. Omnipeek空口抓包(2):扫描无线网络
  19. 机器学习入门 ————》 一元及多元线性回归
  20. 前端网页配色网站推荐

热门文章

  1. 最小栈设计并实现一个minstack类_栈相关
  2. linux7.1怎么安装vnc,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  3. Java网络编程之SocketChannel和ServerSocketChannel
  4. 网页php自描述,一段代码让wordpress博客自动添加关键词(keywords)及网页描述(description)...
  5. PostgreSQL12主从流复制(一主两从)
  6. 计算机 专升硕,2020新西兰专升硕计算机专业可选院校有哪些?新西兰专升硕途径详解!...
  7. oracle分组关联统计,没有记录则显示0
  8. 聚类方法学习(三)亲和力传播算法AP
  9. 解决 ifconfig: command not found
  10. java爬虫爬取主流房屋网站