您的位置:首页 > 职场人生

黑马程序员————第二天

2015-07-15 16:23 387 查看
-(instancetype)initWithAge:(int)age{
if(self=[super init]){

-age=age;

}

teturn self;

}

+(instancetype)personWithAge:(int){
return [[[self alloc] initWithAge:age] autorelease];

}

ARC工作原理

ARC是OC编译器的特性,而不是运行时特性或者垃圾回收机制,ARC所做的只不过是在代码编译时为你自动在合适的位置插入release或者autorelease

不调用 retain release autorelease  retainCount

可重写dealloc但是不可以调用[super dealloc]

强指针__strong 

弱指针__weak

ARC对象释放判断的依据:对象没有强指针指向对象会立即释放内存空间

ARC下多对象内存管理

在ARC机制下不能使用retain应该使用strong

还可使用weak

@property(nonatomic,weak)Dog *dog;

weak指针常见用法是在两个对象间存在包含关系时:

对象1有一个strong指针指向对象2,并持有它,而对象2中只有一个weak指针指向对象1,从而避免了循环持有。

ARC使用特点以及注意事项

@property参数 strong weak assign

注意

ARC中只要弱指针指向的对象不存在,就直接把弱指针做清空(赋值nil)操作。

__weak Student *stu=[Student new];//创建就被销毁

MRC转换ARC

转换哪个项目先切换过来之后选择标题栏的Edit --Refactor

--Convert to OC ARC----确定 之后生成两个视图 

ARC的兼容和转换

ARC模式下如何兼容非ARC的类

选好target--build Phases---comple sources--将MRC的文件选中双击输入-fno-objc-arc

分类的声明和实现

在不修改源代码的前提下,各类增加新的功能

声明

@interface 待扩展的类名 (分类的名称)

@end

分类文件的命名规则

Person+base

@interface Person(base)

@end

实现分类

@implementation 待扩展的类(分类的名称)

@end

文件类型选择 Category

Class 输入类名

分类的注意事项  

1.分类只能增加方法,不能增加成员变量,@property

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

3.如果分类和原来类出现同名的方法,优先调用分类中的方法,原来类中的方法会被忽略

4.当在多个分类中有同名的方法的时候,这时候执行最后编译的方法。

分类非正式协议

非正式协议

非正式协议通常定义为NSObject类的类别

所谓非正式协议就是类别

即凡是NSObject 或其子类Foundation框架中类增加的类别都是非正式协议。

[str characterAtIndex:i]取字符

类的延展

延展类别又称为延展(Extendsion)

Extendsion是Category的一个特例

其名为匿名(空名)就是括号内为空

@interface MyClass()

@end

这种写法叫匿名类别,添加额外的原来没有的变量和属性

延展不能使用@implementation 类名()实现类别的方法

延展的实现

通过延展来实现方法的私有,延展的头文件独立。这种方法不能实现真正的方法私有,当在别的文件中引入延展的头文件,那么在这个文件中定义的类的对象就可以直接调用在延展中定义所谓私有的方法

延展的文件类型设置为extension

文件名Person_work.h只有声明文件

作用可以定义私有变量和方法

block的基本概念

Block对象是一个C级别的语法和运行机制

Block对象包含着一组状态数据,程序运行时产生影响。

可用Block来写一些可以传到API的函数语句,可选择性地存储。

并可以使用多线程。作为一个回调,Block特别的有用,因为block既包含了回调期间的代码,又包含了执行期间的需要的数据。

block同时兼容c oc c++

block基本用法

int (^myBlock)(int)=^(int num){};

第一个int表示返回值

第二个int表示参数类型

第三个int后表示参数名字

{}快对象的主体部分。

void(^myBlock4)()=^(){};

使用Block变量

myBlock4)();

优化之后

void(^myBlock4)()=^{};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: