Arc 自动内存管理 分类Category 类扩展 Block 代码段 和 Protocol协议的一些简单知识的总结

1、

Arc的使用

Arc是自动内存管理;

arc的使用原则

1)、只要对象没有任何强类型指针引用就会被释放’。

2)、只要对象被任何强类型指针指引就不会被释放。

弱指针:__weak

被__weak修饰的指针就被称为弱型指针;

强类型指针

默认的指针都是强类型指针;

被__strong修饰的指针也是强类型指针。

使用Arc时可以重写dealloc方法,但是在重写方法时不能手动调用[super dealloc];

在Arc中通过@property生成的属性如果是OC的对象那么要用Strong来修饰。

如果生成的属性是基本类型,还是使用assign来修饰。

在Arc中解决retain循环,

解决方法:在进行@property时一边使用strong另一边使用 weak。

2、Category   分类

Category是OC的特有语法。

作用:

1)可以在不修改原来类的基础上为这个类扩充一些方法。

2)可以把一个类的内容分在多个不同的文件中存储。

3)便于团队协作开发。

格式

@interface 类名  (分类名)

@end

@implementation  类名  (分类名)

@end

注意:1、分类只能增加方法,不能为主类增加成员变量。

2、分类可以访问原来类中的成员变量。

优先级:如果分类和父类出现同名的方法,优先调用分类中的方法,

如果分类中出现同名的方法,(最后参与编译的优先);

->原来的类,

->父类;

Category的优点:

1)、实现了类的相关方法的模块化;

可以把不同的方法分配到了不同的分类文件中。

可以用一个分类代表一类功能(模块化)。

2)、支持团队协作

可以让团队中的内部成员,共同扩充某个类的功能。

3)、可以为系统自带的类扩充功能。

1*)为每个对象扩展一个show的方法。

类扩展;;

1)、可以为某个类扩充一些私有的成员变量和方法;。

2)、写在  .m文件中。

3)、英文名 class Extension。

书写格式:

@interface  类名()

@end

注:如果方法在 .m文件中有具体的实现,但是在 .h文件中没有声明,那么对于外部来说这个文件变成了私有的,外部无法访问的。

3、Block 代码段;(数据类型)

作用:1,用来保存一段代码,在某一个恰当的时间调用。

2、功能上类似函数和方法。

格式:

返回值类型 (^bolck变量名)(型参列表)=^(型参列表);

当调用block保存的代码时 可以      block变量名(实参);

当使用typedef定义block时

typedef 返回值类型(^block类型名称)(型参列表);

block默认下不能修改外面的局部变量,如果必须要修改可以用__block来修饰该变量。

注意:在调用block时必须先判断nil,否则会报错。

4、Protocol 协议

作用:1、用来声明一些方法。

2、一个Protocol是由一系列的方法声明组成的。

注:任何类只要遵守了Protocol,就相当拥有了Protocol的所有方法。

Protocol的定义格式

@protocol 协议名称;

@end

类遵守协议

@interface 类名:父类名<协议名称1,协议名称2>

•协议中有2个关键字可以控制方法是否要实现(默认是@required,在大多数情况下,用途在于程序员之间的交流)

Ø@required:这个方法必须要实现(若不实现,编译器会发出警告)

Ø@optional:这个方法不一定要实现

注意:代理设计的目的;

- 解耦(主类不再依赖特定的某个类型,而是依赖代理,而很多类型都可以作为代理)。

- 增加了程序的灵活性、可扩展性。

Protocol(协议)是实现代理的一种手段。

补充:

-1、有时候很难抽象共同的父类。

-2、类只能但继承。

时间: 2024-12-15 01:33:22

Arc 自动内存管理 分类Category 类扩展 Block 代码段 和 Protocol协议的一些简单知识的总结的相关文章

黑马程序员---OC基础7【ARC概念】【ARC对象内存管理】【分类Category】

------- iOS培训.Android培训.Java培训.期待与您交流! ---------- [ARC概念]   1.指针的分类 1)强指针,默认的情况下,所有的指针都是强指针,关键字strong: 2)弱指针,_ _weak关键字修饰符的指针 2.ARC概念 自动引用计数 永远不要写retain和release.autorelease三个关键字 编译器会在编译的时候自动插入retain和release.autorelease, 是一个编译器的特性:“垃圾回收”是运行时的特性 3.ARC工

八.OC基础加强--1.autorelease的用法 2.ARC下内存管理 3.分类(category)4.block的学习

1.autorelease的用法   1.自动释放池及autorelease介绍 (1)在iOS程序运行过程中,会创建无数个池子,这些池子都是以栈结构(先进后出)存在的. (2)当一个对象调用autorelease时,会将这个对象放到位于栈顶的释放池中 . 2.为什么会有autorelease? OC的内存管理机制中比较重要的一条规律是:谁申请,谁释放. 但有些情况下,开发者并不能确定某些对象何时释放.这时候就需要自动释放池. 它的好处是: (1)不需要再关心对象释放的时间 : (2)不需要再关

了解自动内存管理

 了解自动内存管理 当创建对象. 字符串或数组时,从中央池中称为堆分配存储它所需的内存.该项目时不再使用,它一次占用的内存可以回收,并用于别的东西.在过去,它通常是由程序员来分配和释放这些块堆内存使用适当的函数调用显式.如今,像统一的单引擎的运行时系统会自动为您管理内存.自动内存管理需要少比显式分配/释放的编码工作,极大地减少了潜在的内存泄漏 (情况在哪里内存分配,但永远不会随后释放). 值和引用类型 当一个函数被调用时,其参数的值复制到为这一具体要求保留的内存区域.可以复制占用只有几个字节

JVM自动内存管理机制——Java内存区域(下)

一.虚拟机参数配置 在上一篇<Java自动内存管理机制--Java内存区域(上)>中介绍了有关的基础知识,这一篇主要是通过一些示例来了解有关虚拟机参数的配置. 1.Java堆参数设置 a)下面是一些简单的使用参数 其中最后一个是一个运行时参数设置的简单实例.一般-XX是系统级别的配置(日志信息,或者是配置使用什么样的垃圾回收器等等),后面跟上+表示启用.不是-XX基本上是对于应用层面的配置信息 下面是一个简单的实例:表示设置初始堆大小为5M,最大堆大小为20M,并将虚拟机的参数设置打印出来,后

2.1 自动内存管理机制--Java内存区域与内存溢出异常

自动内存管理机制 第二章.Java内存区域与内存溢出异常 [虚拟机中内存如何划分,以及哪部分区域.什么样代码和操作会导致内存溢出.各区域内存溢出的原因] 一.运行时数据区域 Java虚拟机所管理的内存包括以下几个运行时数据区域[虚拟机内存模型]: 1.程序计数器: 可以看作是当前线程所执行的字节码的行号指示器.在虚拟机中,字节码解释器工作时就是通过程序计数器的值来选择下一条需要执行的字节码指令.Java虚拟机中多线程是通过线程轮流切换并分配处理机执行时间的方式实现的,在任何一个确定的时刻,一个处

JAVA之自动内存管理机制

一.内存分配 1.JVM体系结构 2.运行时数据区域 3.内存分配二.内存回收 1.垃圾收集算法 2.垃圾收集器三.相关参考一.内存分配JVM体系结构 在了解自动内存管理的内存分配之前,我们先看下JVM的体系结构.代码编译的结果是从本地机器码转变为字节码,经过类加载器加载到虚拟机后才能执行程序.JVM的体系结构主要如下图所示: JVM体系结构 运行时数据区域 在上图中我们可以清楚地看到,JVM在执行Java程序的过程中会把它管理的内存划分为若干个不同的数据区域,分别是程序计数器.Java虚拟机栈

垃圾回收GC:.Net自动内存管理 上(三)终结器

垃圾回收GC:.Net自动内存管理 上(三)终结器 垃圾回收GC:.Net自动内存管理 上(一)内存分配 垃圾回收GC:.Net自动内存管理 上(二)内存算法 垃圾回收GC:.Net自动内存管理 上(三)终结器 前言 .Net下的GC完全解决了开发者跟踪内存使用以及控制释放内存的窘态.然而,你或午想要理解GC是怎么工作的.此系列文章中将会解释内存资源是怎么被合理分配及管理的,并包含非常详细的内在算法描述.同时,还将讨论GC的内存清理流程及什么时清理,怎么样强制清理. 终结器 GC提供了另外一个能

垃圾回收算法手册:自动内存管理的艺术 BOOK

垃圾回收算法手册:自动内存管理的艺术 2016-03-18 华章计算机 内容简介 PROSPECTUS 本书是自动内存管理领域的里程碑作品,汇集了这个领域里经过50多年的研究沉积下来的最佳实践,包含当代最重要的垃圾回收策略与技术,著译双馨. 几乎所有的现代编程语言都采用了垃圾回收机制,因此深入了解此方面内容对于所有开发者而言都大有裨益.对于不同垃圾回收器的工作方式,以及当前垃圾回收器所面临的各种问题,这本权威手册都提供了专业的解答.掌握这方面的知识之后,在面对多种不同的垃圾回收器以及各种调节选项

cocos2d-x学习之自动内存管理

一.自动内存管理 1)概述 C++语言默认是没有提供自动内存管理的.使用者需要自己分配,自己释放.在cocos2d-x里提供了一个自动内存管理的方案.主要是通过CCObject来提供的,用户只要继承了CCObject,就可以通过调用autorelease()来告诉系统进行自动内存管理. 一般用法就是:    CCLayer* pLayer = CreateLayer(s_nActionIdx);    pLayer->autorelease(); 2)自动内存管理的实现 自动内存管理的实现原理大