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文件中再使用时导入协议
Objective-C基础4的更多相关文章
- Objective—C基础学习总结
1. (1)面向过程:一种以事件为中心的编程思想 (2)面向对象:一种以对象为中心的编程思想 2.get和set是用来访问和修改对象里的属性值 ...
- Objective C 基础
1,字符串加@: 不加@的是C语言字符串. 加@的代表的是OC的NSString http://www.jikexueyuan.com/course/71_2.html 2,setValuesForK ...
- [置顶] IOS 基础入门教程
IOS 基础入门教程 教程列表: IOS 简介 IOS环境搭建 Objective C 基础知识 创建第一款iPhone应用程序 IOS操作(action)和输出口(Outlet) iOS - 委托( ...
- Getting Started with Core Data
Getting Started with Core Data Getting Started with Core Data Coreframework支持创建对象模型封装你的应用数据和逻辑满足MVC设 ...
- Automake
Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...
- Objective-c——UI基础开发第十二天(相册展示)
一.知识点 模仿新特性 UICollectionViewFlowLayout自定义布局 相册 瀑布流(淘宝购物之类的 二.复习 a.UICollectionView 和 tableview共享一套AP ...
- Objective-c——UI基础开发第十一天(UICollectionView)
一.知识点 1.UICollectionView的dataSource .delegate 2.UICollectionView多组数据和单组数据的展示 3.UICollectionView.UICo ...
- Objective-c——UI基础开发第十天(自动布局)
一.autoresizing 的使用(了解) 只能参照父控件 1.实现横竖屏幕切换,不能把控件的frame血丝,需要进行屏幕适配 2.需要参照父控件 use auto layout禁用 才会出现aut ...
- Objective-c——UI基础开发第九天(QQ好友列表)
一.知识点: 1.双模型的嵌套使用 2.Button的对齐方式 3.优化UITableView的加载 4.layoutSubview的使用 5.cell的折叠代理 二.双模型的嵌套定义: 注意是将se ...
- Objective-c——UI基础开发第八天(QQ聊天界面)
一.知识点: QQ聊天界面 双模型的使用(dataModel和frameModel) UITextField的使用 通知的使用 拉伸图片的两种方法(slicing/image对象的resizeable ...
随机推荐
- redis 3.0的集群部署
转载请注明出处:http://hot66hot.iteye.com/admin/blogs/2050676 最近研究redis-cluster,正好搭建了一个环境,遇到了很多坑,系统的总结下,等到re ...
- 修改AspNetPager的CustomInfoHTML,添加自定义样式
AspNetPager控件有一个属性叫CustomInfoHTML,可以把它写在前台页面,如下: <webdiyer:AspNetPager ID=" HorizontalAlign= ...
- Spring的3种切入点PointCut实现
Pointcut是Join Point的集合,它是程序中需要注入Advice的位置的集合.Spring主要提供了3种切入点的实现: 1.静态切入点: 2.动态切入点: 3.自定义切入点. 静态切入点 ...
- Android自定义控件----RadioGroup实现APP首页底部Tab的切换
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- CNUOJ 0486 800401反质数
难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 将正整数 x 的约数个数表示为 g(x).例如,g(1)=1,g(4)=3, g ...
- 读书笔记:const和readonly、static readonly 那些事
C#中表示不变的量(常量)的两种形式:const 和readonly const 是静态常量 readonly 是动态常量 严格的来讲:const 应该称为常量 而readonly 则应称为只读变量. ...
- 怎样解决Myeclipse中运行jsp乱码问题,亲测有效(虽然是个小问题但是为了大家不被网络上的一些乱七八糟的回答坑)不是改什么windows-propories-...............
方法: 在jsp页面中pageEncoding属性值改为UTF-8,指定用UTF-8编码.gbk或者gb18030编码都无效.不是改什么windows-propories-.............. ...
- PSI and index do not match: PSI and index do not match
解决来自:http://blog.csdn.net/huberjobs/article/details/50829603
- spawn协程学习
对于IO密集型的程序,一般比较高效的做法是选择异步来实现,因为使用异步的方法更容易写出高效的程序.然而使用异步的话,经验较少的人往往会使自己的程序结构变得很混乱,进而导致程序的可读性变差.记得有人说过 ...
- monkey命令
介绍: monkey是一个命令行工具,可以运行在Android模拟器里或真实设备中.它可以向系统发送伪随机(pseudo-random)的用户事件流(如按键输入.触摸屏输入.手势输入等),可以对待测的 ...