一直想写一般Objective-C帖子,总是没时间。所以,我希望有一个巨大的知识更小。温馨提示小的变化。写一点点,每天。东西把他们的学习分享,好了废话不多。

1、一门动态的语言OC

Object-C(下面简称OC)是一门面向对象语言,这恐怕学过编程的人都知道。可是OC跟其它语言相比,显得格格不入。

由于它是一门消息结构语言,而非函数调用。所以语法上显得非常怪,一般是这样:

[对象消息];

可是消息型语言有一个优点。就是它的动态性。其执行时所执行的代码都是动态的,依据当时执行环境决定。而函数式语言,所执行的代码编译阶段就已经确定。

函数式语言编译的时候须要查询函数表才干知道究竟执行那段代码。

而消息式语言,编译时期无需知道该执行哪段代码,由于它总是到执行的时候,才会去找。

它甚至不须要知道消息对象的类型。而这一个过程称之为“动态绑定”。

所以OC的执行时不同于其它语言,OC重要的工作都在“执行期组件”中完毕。OC的全部特性以及内存管理都在“执行期组件”完毕,“执行期组件”本质是动态库。而代码能把开发人员所写的全部代码组合起来。这种话,仅仅须要更新“执行期组件”就能提高程序性能,而那些函数式语言就须要又一次编译。

2、“堆内存”和“栈内存”

与C++不同。OC不同意将OC对象的内存分配到栈(stack)上。仅仅能分配到堆(heap)上。

C++     string str = "123"; 合法

OC      NSString str = @"123";非法

OC必须用一个指针指向一个OC对象。如:

NSString* str = @"123";合法

而大家都知道指针的内存分配到栈上 。

所以比如:

NSString* str2 = str;

这不过进行一次指针的拷贝。并没有分配新的空间。

用一张图来描写叙述就是这样:

分配在栈上的内存。系统自己主动清理。

而分配到堆上的内存由程序猿来清理。而OC本身实现了引用计数模式管理内存。

但有时候,你会发现有些变量定义不含“ * ”。

那么他们可能会分配在栈上。

(id除外。由于它本身已经是指针)

OC是C得超集,全然兼容C所以基本类型和结构体是同意分配到栈上的,比方:

NSInteger  CGFloat CGRect   CGPoint  int double BOOL 等等。

创建结构的开销远远小于对象。

假设你对C语言不是太熟悉。那么你得努力了。

3、引用计数与自己主动引用计数(ARC)

引用计数是内存管理的一种策略。简言之,每个对象须要维护一个整数,这个整数记录了该对象被引用的次数,假设有新的引用(指针的拷贝)指向该对象,那么引用计数+1,当失去一个引用的指向时,引用-1。当没有不论什么引用指向该对象时,对象被销毁。

由于OC仅仅同意对象分配到堆上,所以引用计数对于OC非常合适。可是引用计数维护成本略高,并且easy出错,引用计数过多,造成内存泄露。过少。出现野指针,对于经验少的程序猿,非常难做到平衡。须要熟悉这套机制,并且熟悉相应的API。所以高级的编译器支持自己主动引用计数,将引用计数的工作交给编译器,编译器通过检測针对引用计数进行控制。可是它也有自己的规则。以后的帖子会讲到。

今天就说到这个里,多谢观看。

今天的要点:

OC是C得超级。添加了面向对象性。OC使用动态绑定的消息结构,仅仅有执行时才干知道对象的类型。以及须要执行的代码。不由编译器决定。

理解什么是存储在堆内存,什么堆栈存储器。

版权声明:本文博主原创文章。博客,未经同意不得转载。

IOS加强知识(1)理解力Objective-C的更多相关文章

  1. iOS多线程知识总结--GCD

    iOS多线程知识总结--GCD 1. iOS中苹果提供4钟方案来帮助我们实现多线程: (1) 纯C语言的pthread,偏底层,需要程序员手动管理线程的生命周期,基本不用. (2) OC语言的NSTr ...

  2. iOS 开发知识小集(1)

    iOS 开发知识小集(1) 2015-05-15  iOS大全 (点击上方蓝字,快速关注我们) 一直想做这样一个小册子,来记录自己平时开发.阅读博客.看书.代码分析和与人交流中遇到的各种问题.之前有过 ...

  3. iOS多线程知识梳理

    iOS多线程知识梳理 线程进程基础概念 进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 线程 1个进程要想执行任务,必须得有线程(每1个 ...

  4. iOS 多线程知识梳理

    #iOS多线程知识梳理 ##线程进程基础概念 ###进程 进程是指在系统中正在运行的一个应用程序每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 ###线程 1个进程要想执行任务,必须 ...

  5. iOS开发知识梳理博文集

    前言 做iOS开发有3年了,从当初的小白到现在,断断续续看过很多资料,之前也写过一些博文来记录,但是感觉知识点都比较凌乱.所以最近准备抽时间把iOS开发的相关知识进行一个梳理,主要分为OC基础.UI控 ...

  6. iOS面试必备-iOS基础知识

    近期为准备找工作面试,在网络上搜集了这些题,以备面试之用. 插一条广告:本人求职,2016级应届毕业生,有开发经验.可独立开发,低薪求职.QQ:895193543 1.简述OC中内存管理机制. 答:内 ...

  7. iOS 定位系统 知识

    最近在做考勤定位系统 总结一些定位系统的知识. 后期会出一份算法主要攻克地球坐标和火星坐标转换的 1.关于百度的火星坐标定位策略 地图SDK/定位SDK的定位策略: WIFI + 基站 +GPS 三者 ...

  8. iOS系统知识架构(转)

    转载的,哪些所谓的资深开发,谁敢说自己没有知识盲区?http://ios.skyfox.org/route.html

  9. 今天開始慢下脚步,開始ios技术知识的查漏补缺。

    从2014.6.30 開始工作算起. 如今已经是第416天了.不止不觉.时间过的真快. 通过对之前工作的总结.发现,你的知识面.会决定你面对问题时的态度.过程和结果. 简单来讲.知识面拓展了,你才干有 ...

随机推荐

  1. 自己定义UITabBarController

    网上大多的自己定义TabBar都是继承View的,项目中要用到path+Tabbat这种话(path用的MMDrawerController这个框架),继承View的Tabbar是无法满足条件的(不是 ...

  2. 百度搜索结果页url参数详解

    在百度首页输入任意关键词搜索之后,我们跳转到搜索结果页面,在浏览器的网址栏我们可以看到很长的一串url地址.那么,你真的了解这一串url的含义吗? s?:搜索 百度搜索结果页使用了重定向,因此我们看到 ...

  3. js封装的类似java StringBuilder类

    使用js的时候,经常会使用字符串拼接,但是在IE6和IE7没有对+作优化,所以性能会很低,鉴于此,我封装了StringBuilder类,用于拼接字符串,直接把代码贴出来如下: function Str ...

  4. BUG系列:转让startActivityForResult()&onActivityResult()没有反应

    前天遇到了一个麻烦,还真是麻烦啊. 我使用startActivityForResult()&onActivityResult().由Activity-A 跳转到Activity-B 页面,然后 ...

  5. 祝贺自己itpub和csdn双双荣获专家博客标题

    这是业界难以得到认同内的技能,记录下来.油...所有的钱,明天会更好.

  6. 如何解决KEIL 5 编KEIL4同RTX系统的project解决方法

    1.我个人KEIL5与KEIL4对照 相较于KEIL 5 的"华丽".笔者还是喜欢KEIL4的"内敛",主要也还是习惯了.懒得换了.由于工作的  原      ...

  7. sha256

    SHA-512 (这些有时候也被称做 SHA-2). 简介 SHA 家族 SHA (Secure Hash Algorithm,译作安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技 ...

  8. 使用U盘进行Linux系统的安装

    由于目前很多服务器已经本身不配光驱了,最近测试了下使用U盘进行Linux系统的安装,过程比较简单,需要注意的地方如下: 1.找一台linux主机,插入U盘,执行fdisk -l,识别到U盘. 2.将需 ...

  9. loj1341(数学)

    传送门:Aladdin and the Flying Carpet 题意: 给出两个正整数1<=m<=n<=1e12.问N可以拆成多少对p*q,使得p和q中最小的不小于a,且p!=q ...

  10. Cocos2dx3.4 VS2013无法打开包括文件extensions/ExtensionExport.h解决的方法

    本来打算看白鹭引擎的.可是又被叫回来研究新引擎呢,不搞不知道,一搞发现cocos2dx新版本号3.4又有了一些变化. 我查了网上的资源,都没有解决的方法.我如今应该是第一个出这个问题的解决的方法哦.. ...