0%

OC问题记录

概念

category extension

终于搞懂了这个分别,是不是可以不用每次都查网了。
自己理解下:
category就是分类,把不同功能的代码分到不同的文件里。
extension就是匿名分类,不用新建文件,在原代码文件里添加方法。

Category和Extension这两个概念,这是Objective C为程序员提供的两个强大的动态机制——简单地说,它们允许程序员为已有的对象添加新的方法,即便是在没有该对象的源代码的情况下。

Category准确的定义是这样的:Category拥有一个名字,它不需要使用子类(Subclassing)机制,就允许向一个类文件中添加新的方法声明,并且在类实现的文件中的同一个名字下定义这些方法。其语法举例如下:
不过到现在为止,Category这个名字看起来仍然让人摸不着头脑——Category的中文是分类和范畴的意思——即便这个动态机制很强大,跟分类有什么关系呢?

这是因为利用这个机制,程序员可以把一堆方法分门别类,分成若干组,每组方法用一个Category名字加以命名,定义在同一个文件里。这个就是为什么把这个机制叫做Category的原因。

注意Category只能用于方法,不能用于成员变量。

理解了Category,Extension就不难理解了。Extension是Category的一个特例,其名字为匿名(为空),并且新添加的方法一定要予以实现。(Category没有这个限制)

MAC 开发笔记——Objective C 语法之Category和Extension

Assigning retained object to weak property; object will be released after assignment

直接向 weak 变量赋值一个 刚刚初始化还没有 retain 的 strong 引用,报错。
因为这样一旦离开作用域,weak 变量直接致为 nil。
iboutlet 的 weak 作用一样。只负责引用,而不影响内存管理用的引用计数。

@property (nonatomic, weak) KGModalContainerView *containerView;
...
-(void)viewDidLoad {
[super viewDidLoad];
KGModalContainerView *myContainerView = [[KGModalContainerView alloc] initWithFrame:containerViewRect]; // This is a strong reference to that view
[self.view addSubview:myContainerView]; //Here self.view retains myContainerView
self.containerView = myContainerView; // Now self.containerView has weak reference to that view, but if your self.view removes this view, self.containerView will automatically go to nil.

// In the end ARC will release myContainerView, but it's retained by self.view and weak referenced by self.containerView
}

常用

生成随机数

arc4random() 比较精确不需要生成随即种子
使用方法 :
通过arc4random() 获取0到x-1之间的整数的代码如下:
int value = arc4random() % x;
获取1到x之间的整数的代码如下:
int value = (arc4random() % x) + 1;