Objective-C 碎碎念 8

本文为大地瓜原创,欢迎知识共享,转载请注明出处。
虽然你不注明出处我也没什么精力和你计较。
作者微信号:christgreenlaw


@autoreleasepool

@autoreleasepool {
    在这里边的对象,只要发送过autorelease消息就不用担心释放的问题了
    自动释放池销毁前,会给所有发送过autorelease的对象发送一条release消息
!!!(不保证销毁对象,只是发送一条release消息而已)
}
    //下面这样写也是一样的
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    
    Person *p = [[[Person alloc] init] autorelease];
    [p run];
    
    // 销毁一个自动释放池
    [pool release];

Category

分类的声明

@interface ClassName (CategoryName)
//方法声明
//不允许添加变量
@end

分类的实现

@implement ClassName (CategoryName)
//方法实现
@end

注意事项

  1. 分类是给类添加方法的,不可用来添加实例变量(根本就不允许)
  2. 分类中的property只会生成getter/setter声明,而不会生成实现以及对应的实例变量。
  3. 方法会从父类开始查找,然后是本类,子类
  4. 分类中可以访问.h中的属性
  5. 分类中如果有和原类同名的方法,则会使用分类中的方法(开发中忌讳这样写,如果你需要对已有方法进行自定义,请重写或继承,否则会引起很大的困惑
  6. 若多个分类有重名方法,调用谁,则取决于编译器最后编译的是哪一个(也就是说每编译一次重名方法都会对原来的方法进行覆盖)

匿名分类(也叫延展 extension)

在iOS中你将天天和这个打交道。
所谓匿名,也就是没有分类名,圆括号中没有内容。一般写在类的.m中,@implement之前。

你可能感兴趣的:(Objective-C 碎碎念 8)