黑马程序员——OC学习小结------arc,block,protocol(协议)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、ARC的判断准则:只要没有强指针指向对象,就会释放对象

  1.ARC特点

    1> 不允许调用release、retain、retainCount

    2> 允许重写dealloc,但是不允许调用[super dealloc]

    3> @property的参数

      * strong :成员变量是强指针(适用于OC对象类型)

      * weak :成员变量是弱指针(适用于OC对象类型)

      * assign : 适用于非OC对象类型

    4> 以前的retain改为用strong

  2、 指针分2种:

    1> 强指针:默认情况下,所有的指针都是强指针 __strong

    2> 弱指针:__weak

  3、当两端循环引用的时候,解决方案:

    1> ARC:1端用strong,另1端用weak

    2> 非ARC:1端用retain,另1端用assign

二、block要掌握的东西

  1、如何定义block变量

int (^sumBlock)(int, int);
void (^myBlock)();

  2、如何利用block封装代码

^(int a, int b) {
    return a - b;
 };

^() {
    NSLog(@"----------");
 };

^ {
    NSLog(@"----------");
 };

  3、block访问外面变量

    * block内部可以访问外面的变量

    * 默认情况下,block内部不能修改外面的局部变量

    * 给局部变量加上__block关键字,这个局部变量就可以在block内部修改

  4、利用typedef定义block类型

 typedef int (^MyBlock)(int, int);

 // 以后就可以利用MyBlock这种类型来定义block变量
 MyBlock block;
 MyBlock b1, b2;

 b1 = ^(int a, int b) {
    return a - b;
 };

 MyBlock b3 = ^(int a, int b) {
    return a - b;
 };

三、protocol(协议)

  1.协议的定义:

 @protocol 协议名称 <NSObject>
  // 方法声明列表....
 @end

  注意:协议只有方法的声明,方法的实现在遵守该协议的类中实现。

  2.如何遵守协议

    1> 类遵守协议

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

      @end

    2> 协议遵守协议

      @protocol 协议名称 <其他协议名称1, 其他协议名称2>

      @end

  3.协议中方法声明的关键字

    1> @required (默认)

     要求实现,如果没有实现,会发出警告

    2> @optional

     不要求实现,怎样都不会有警告

  4.定义一个变量的时候,限制这个变量保存的对象遵守某个协议

    类名<协议名称> *变量名;

    id<协议名称> 变量名;

    NSObject<MyProtocol> *obj;

    id<MyProtocol> obj2;

    如果没有遵守对应的协议,编译器会警告

  [email protected]中声明的属性也可用做一个遵守协议的限制

   @property (nonatomic, strong) 类名<协议名称> *属性名;

   @property (nonatomic, strong) id<协议名称> 属性名;

   @property (nonatomic, strong) Dog<MyProtocol> *dog;

    @property (nonatomic, strong) id<MyProtocol> dog2;

  6.协议可用定义在单独.h文件中,也可用定义在某个类中

    1> 如果这个协议只用在某个类中,应该把协议定义在该类中

    2> 如果这个协议用在很多类中,就应该定义在单独文件中

  7.分类可用定义在单独.h和.m文件中,也可用定义在原来类中

    1> 一般情况下,都是定义在单独文件

    2> 定义在原来类中的分类,只要求能看懂语法

四、代理模式

#import <Foundation/Foundation.h>
#import "TicketDelegate.h"

@interface Person : NSObject
- (void) buyTicket;

// 拥有一个代理属性
// id代表代理的类名随便
// 但必须遵守TicketDelegate协议
@property (nonatomic, retain) id<TicketDelegate> delegate;

@end

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

时间: 2024-08-28 09:42:35

黑马程序员——OC学习小结------arc,block,protocol(协议)的相关文章

黑马程序员-OC学习笔记之block

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9426    Accepted Submission(s): 4151 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做par

黑马程序员——OC学习小结------OC内存管理

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.计数器 1.方法的基本使用 1> retain :计数器+1,会返回对象本身 2> release :计数器-1,没有返回值 3> retainCount :获取当前的计数器 4> dealloc: * 当一个对象要被回收的时候,就会调用 * 一定要调用[super dealloc],这句调用要放在最后面 2.概念 1> 僵尸对象 :所占用内存已经被回收的对象,僵尸对象

黑马程序员——OC学习小结------构造方法,分类,方法的重写,SEL

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.万能指针,能指向\操作任何OC对象 typedef (NSObject *) id; // id == NSObject 二.构造方法 1.完整地创建一个可用的对象: 1>分配存储空间  +alloc 2>初始化 –init init就是构造方法:用来初始化对象的方法,是个对象方法,- 开头 重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值 2.重写构造方法的注意点:

黑马程序员——OC学习小结------OC入门

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一. 1.使用了基类NSObject,要调用Foundation框架的Foundation.h头文件. 2.一个完整的类,包含了类的声明和实现: 3.类的声明:声明对象的属性和行为 @interface Car : NSObject { // 用来声明对象属性(实例变量\成员变量,默认会初始化为0) // @public可以让外部的指针间接访问对象内部的成员变量 @public int whe

黑马程序员——OC学习小结------Foundation框架

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.常用的结构体 NSRange (location,length) NSPoint\CGPoint (x,y) NSSize\CGSize (width, height) NSRect\CGRect (CGPoint,CGSize) NSRange void range() { /* @"i love oc" love的范围 NSRange r1 = {2, 4}; // 不用 N

黑马程序员——OC学习小结------封装,继承,多态

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.封装 1.成员变量尽量不要用@public来修饰 2.只读(readonly):只允许外界访问,不允许外界修改.即只提供get方法,不提供set方法. 3. set方法 1)作用: 提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤 2)命名规范: 1> 方法名必须以set开头 2> set后面跟上成员变量的名称,成员变量的首字母必须大写 3> 返回值一定是void

黑马程序员——OC学习小结------成员变量以及对应的set、get方法

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.总结 1.只有利用类名调用类方法的时候,不需要在类名后面写*.其他情况下,类名后面统一加上一个* Circle *c1 = [Circle new]; - (BOOL)isInteractWithOther:(Circle *)other; 2.返回值是BOOL类型的方法,方法名一般都以is开头 - (BOOL)isInteractWithOther:(Circle *)other; 3.

黑马程序员-OC学习笔记之ARC

---------------------- IOS开发.Android培训.期待与您交流! ----------------------一.什么是ARC        ARC是自动引用计数,苹果官方在Xcode4.2及以后版本中加入的一个内存管理机制,完全取代了程序员人工的内存管理,使得程序员只须关心程序本身.使用ARC,编译器会自动在代码中加入内存管理代码,是一个编译器特性,而不是运行时特性,当然,它也和JAVA的垃圾回收不同,它的本质和手动的内存管理是一样的,只是这些代码编译器会自动添加.

黑马程序员-OC学习笔记之Foundatio框架集合类

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.OC数组 OC数组是一个类,它也分不可变数组NSArray和可变数组NSMutableArray. 1?不可变数组的创建 // 创建一个不可变数组,元素为一个OC字符串对象 @"小桥" NSArray *array1 = [NSArray arrayWithObject:@"小桥"]; // 创建一个不可变数组,元素为多个O