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

-(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)()=^{};























































































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值