IOS学习笔记-协议和代码块

原创 2013年12月02日 22:41:19

用协议的方法是在类的@interface声明中列出协议的名称。采用协议就意味着你承诺实现该协议的所有方法。否则,编译器会生成警告来提醒你。

声明协议的方式:

@protocol MySuperDuberProtocol <MyParentProtocol>

@end

复制的种类:

1)浅层复制:不会复制所引用的对象,新复制的对象只会指向现有的引用对象。

2)深层复制:将复制所有的引用对象。

Objective-C 2.0中增加了两个新的协议修饰符:@optional@required。@optional代表必须要实现的方法,@required代表可以选择性去实现的方法。

代码块除了函数中的代码,代码块还包含变量绑定,它包含两种类型的绑定:自动型托管型自动绑定使用的是栈中的内存,而托管绑定是通过堆创建的。

代码块的特征:

1)返回类型可以手动声明也可以由编译器推导;

2)具有指定类型的参数列表;

3)拥有名称。

代码块的定义:void(^my_block)(void);

在声明代码块变量和代码块实现的开头位置都要使用幂操作符(^)。一般我们可以这样使用代码块:

<returntype> (^blockname)(list of arguments) = ^(arguments){body;};

本地变量会被代码块作为常量获取到。如果你想要修改他们的值,必须将他们声明为可修改的,也就是声明为_block类型的。有些变量是无法声明为_block类型的。它们有两个限制:

1)没有长度可变的数组;

2)没有包含可变长度数组的结构体。

使用代码块时的内存管理规则:

1)如果引用了一个Objective-C对象,必须要保留它。

2)如果通过引用访问了一个实例变量,要保留一次self(即执行方法的对象)。

3)如果通过数值访问了一个实例变量,变量需要保留。

GCD(Grand Central Dispatch):苹果公司为了减轻在多核上编程的负担而引入的一个概念。

如果你定义了一个属性并且没有指定关键字nonatomic作为属性的特性,编译器会生成强制彼此互斥的getter和setter方法。因为编译器生成了@synchronize(mutex,atomic)语句类确保彼此互斥。

一共有三种类型的队列:

1)连续队列:一连串任务需要按照一定的顺序执行。

2)并发队列:适合用于那些可以并行运行的任务。

3)主队列:使用dispatch_get_main_queue可以访问与应用程序主线程相关的连续队列。

有两种方式可以向队列中添加任务:

1)同步:队列会一直等待前面任务结束。

2)异步:添加任务后,不必等待任务,函数会立刻返回。推荐优先使用这种方式,因为它不会阻塞其他代码的运行。

在上下文对象弃用时调用的函数,通常被称为终结器(finalizer)函数。

如果想要使用操作,首先需要创建一个操作对象,然后将其指派给操作队列,并让队列执行它。一共有3种创建操作的方式:

1)NSInvocationOperation:如果你已经拥有一个可以完成工作的类,并且想要在队列上执行,可以尝试使用这种方式。

2)NSBlockOperation:这有些像包含了需要执行代码块的dispatch_async函数。

3)自定义的操作:如果你需要更灵活的操作类型,可以创建自己的自定义类型。你必须通过NSOperation子类来定义你的操作。

【JavaSE学习笔记】面向对象_static关键字、代码块、API文档的使用与制作

面向对象 A.static关键字 1)static关键字(静态的,共享的) 定义一个“人”类:针对以下这个代码,提供个三个参数的构造方法 发现每次创建对象的时候,都要给coun...

Ruby元编程-学习笔记(三)-代码块

块 块可以定义在大括号中, 也可以放在do…end关键字中, 一般来说,只有一行的块使用{},而对多行的块使用do…end 只有在调用一个方法时才可以定义一个块,块会被直接传递给这个...
  • gxcbuf
  • gxcbuf
  • 2016年04月23日 13:03
  • 290

java学习笔记-代码块

在编程过程中我们可能会遇到如下这种形式的程序:public class Test { { //// } }这种形式的程序段我们将其称之为代码块,所谓代码块就是用大括号(...

java个人学习笔记17(synchronized+同步函数+同步代码块+死锁)

1.同步函数:就是在函数上加上同步关键字(syschronized)进行修饰    同步函数使用的锁即this,调用该函数的对象(下面例子中的b)    同步有两种形式: 1)同步代码块 2)...

php学习笔记(三十六)smarty中使用自定函数和代码块(smarty2和smarty3的不同)

初始化 init.smarty.php

JAVA学习笔记(九)- 初始化块与静态代码块

初始化块/* * 初始化块 * 初始化变量方式:声明时、构造函数、代码块 * 使用static关键字修饰的代码块,称为静态代码块 * * 执行顺序:静态代码块>代码块>构造方法 * ...

Java学习笔记之初始化块(代码块)

类的第四个成员:初始化块(代码块)【属性、方法、构造器】 1.代码块如果有修饰的话,那么只能使用static 2.使用static修饰的叫静态代码块,没有使用static的叫非静态代码块。 ...

[javase学习笔记]-8.8 构造代码块

这一节我们再看一个特殊的代码块,那就是构造代码块。 这里我们简单的通过例子来说明一下: class Person { private String name; { System.out....

Java学习笔记----代码块

代码块的概念 代码块的分类 代码示例 代码块的概念在Java中,使用{}括起来的代码被称为代码块,根据其位置和声明不同,可以分为局部代码块、构造代码块、静态代码块、同步代码块。代码块的分类1、局部代码...

并发学习笔记(二):synchronized代码块

需求:创建一个服装店对象实例,用两个线程模拟两个人同时进店挑衣服->试衣服->买衣服的过程。 代码: public class ShopDemo { public static void mai...
  • dumzp13
  • dumzp13
  • 2016年03月29日 23:27
  • 166
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOS学习笔记-协议和代码块
举报原因:
原因补充:

(最多只允许输入30个字)