Objective-C基础4

1.强指针:默认的情况下所有的指针都是强指针,关键字__strong

弱指针:__week关键字修饰的指针

2.ARC:编译器将自动在代码合适的地方插入retain、release、autorelease

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

3.判断是否是ARC

查看项目信息;不能使用retain、release、autorelease、retainCount,在dealloc方法中不能使用[super dealloc]

正常创建对象,不用手动释放对象

4.ARC下循环引入的问题,解决办法一端使用强指针一端使用弱指针

5.@property参数

strong强指针

week弱指针

6.__week Person *p=[[Person alloc]init];//不合理,对象一创建出来就被释放掉,对象释放掉后,ARC把指针设置为nil

7.分类的使用,扩展原来类的方法

#import "Student.h"

@interface Student (study)
-(void)run;
@end
#import "Student+study.h"

@implementation Student (study)
-(void)run{
    NSLog(@"study run");
}
@end

分类里的方法跟原来的方法一样使用,如果分类中和类中方法名一样,优先调用分类的方法

8.非正式协议

所谓的非正式协议就是类别,即凡是NSObject或者其子类的类别,都是非正式协议

9.扩展-特殊的分类

分类名为空,可以增加类的实例变量和方法,但是方法须在类本身的.m文件中实现

变量和方法相当于私有

10.block的定义

int (^myblock)(int,int)=^(int a,int b ){   };

调用方式:

myblock(1,2);

可以再给myblock赋值

22.typedef bolck

typedef int (^Myblock)(int,int)=^(int a,int b ){   };

Myblock myblock1,myblock2;

23.block内可以访问外部的变量

当定义block的时候,block会把外部变量的值以const的方式复制一份,放到block所在的内存中,不能修改

全局变量可以修改

外部变量加__block那么block内部不再以const的方式拷贝,可以在block内部修改,再后面的代码中,全部使用的是堆区空间

24.block的应用场景,把代码块作为参数传递

或者block作为返回值

25.助记符 inlineBlock

26.protocol类似java的借口,但协议中的方法不是全部必须实现

步骤:

定义协议

@protocol 协议名称<NSObject>

@end

采纳协议

@interface Person:NSObject <协议1,协议2>

@end

实现协议的方法

当遵守了某个协议后,就有了这个协议中所有方法的声明

协议还可以遵守其他的协议

OC不能继承多个类,但是能够遵守多个协议

27.protocol方法的修饰符

必须实现@required

选择实现@optional

28.id类型后面加<协议名>表示只能赋值遵守了协议的对象

类名后面加<协议名>表示只能赋值遵守了协议的当前类的对象

29.协议代理模式

传入的对象,代替当前类完成了某个功能,称为代理模式

30.@protocol

在.h文件中用@protocol 协议名 代替import导入协议

在.m文件中导入协议

在main文件中再使用时导入协议

 

posted @ 2015-11-07 21:08  柱柱  阅读(170)  评论(0编辑  收藏  举报