笔记

iOS层次架构:


Cocoa Touch->Media->Core services ->Core OS

Cocoa Touch:创建IOS应用程序所需的关键框架

Media:图形技术 音频技术 和视频技术 

Core Services:提供基础系统服务

Core OS:底层功能是很多其它技术的构建基础 通常情况下这些功能不会直接应用于应用程序

而是应用于其它框架 

在编写代码时 应当尽可能地使用高层框架而不要使用底层框架 高层框架为底层框架构造提供面向对象地抽象

这些抽象可以减少需编写的代码行数 同时还对诸如Socket和线程这些复杂功能进行封装

从而让编写代码变得更加容易 虽说高层框架是对底层构造进行抽象 但是它并没有底层技术屏蔽起来

如果高层框架没有为底层框架的某些功能提供接口 开发者可以直接使用底层框架


由于Object-C的动态类型特征 Object-C不能对方法进行内联一类的优化 使得Object-C的应用程序比C或C++程序更小

由于Object-C使用动态运行时类型 而且所有的方法都是函数调用 很多常见的编译时性能优化方法都不能用于

Objective-C 例如内联函数 常数传播 交互式优化 纯量取代 和聚集等 这使得Objective-C性能劣于类似的对象抽象语言


Objective—C属性特性:


assign:指定setter 方法简单负值 不更改索引计数 使用assign 对基础数据类型和C数据类型

retain:释放旧的对象 将就对象的负值输入对象 再提高输入对象的索引计数为1 使用retain

 对其它NS Object和其子类  retain说明属性再负值的时候 先release之前的值再赋新值给属性 引用再加1


copy:基本上像retain但没有增加引用计数


readonly:将生成getter方法而不是生成setter方法

readwrite:默认属性 将生成不带额外参数的getter 和setter方法


atomic:对于对象的默认属性 就是setter/getter生成的方法是一个院子操作

nonatomic:不保证setter/getter的院子行 多线程情况下数据可能会有问题


Objective-c 种所有释放都必须写在[super dealloc]的前面


-------错误的写法--------

- (void)dealloc

{

    

    [super dealloc];

    [XXX release];

    ......

}


-------正确的写法--------


 

- (void)dealloc

{

    [XXX release];

    [super dealloc];

    ......

}



原因是 你所创建的每个类都是从父类 根类继承来的 有的很多实例变量也会被继承来 这部分有时候会在程序中使用 它们不会自动释放内存 你需要调用父类的dealloc 来释放 然后在此之前必须把自己所写类种的变量内存先释放掉 否则会造成本类中的内存积压 造成内存泄露
使用ARC后几不需要手动释放~~~
ARC中dealloc 虽然可以被重载 但是不能调用[supper dealloc]

Objective-c中的对象 有强参照和弱参照之分 当需要保持其他对象的时候 需要retain以确保对象引用计数加1 
对象的持有者owner只要存在 那么该对象的强参照就一直存在
对象的处理基本规则是:
只要对象的持有者存在(对象被强参照) 那么就可以使用该对象
对想失去了持有者后 即被抛弃
http://justcoding.iteye.com/blog/1391548
http://www.cnblogs.com/flyFreeZn/p/4264220.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值