OC编程笔记

  1. 如果要给一个属性不一样的访问方法,需要在property里进行指定,如下:
    @property(getter = isFinished) BOOL finished;

  2. 可以自定义变量名字,需要定义跳转的值,如下:
    @implementation class
    @sythesize propertyName = instanceVarivalbeName
    ….
    @end

  3. 一定要保证weak属性在被调用之前不为nil,比如:
    if(self.weakProperty) {….}

  4. Unsafe Unretained: 有些不支持weak的属性,比如NSTextView,NSFont和NSColorSpace等,使用方法如下:
    @property (unsafe_unretained) NSObject *unsafeProperty;
    NSObject *__unsafe_unretained unsafeReference;
    unsafe 引用 和weak引用类似,但是他在目标对象为nil时不会被置为nil。所以有可能存在野指针的情况。

  5. 处理两个对象时,==操作符表示测试两个不同指针是否指向同一个对象;
    如果要测试两个对象是否含有同样的值,应当使用 isEqual方法。

  6. 在运行时,通过category添加的方法和通过原始class添加的方法没有区别。

  7. 除了可以给现有class添加方法,category也可以用来分割复杂class的各种实现。

  8. 如果一个在category里定义的方法名和原始class或者另一个category中定义的方法名一样,那么运行时执行哪一个方法名的方法就不一定了。

  9. 为了防止未定义的行为,最佳实践是给方法名添加前缀。

  10. extension和category功能类似,但是extension只可以给已知源码的class添加方法。

  11. class extension经常用来给public class添加private方法或者属性。 例如,定义一个属性为readonly在外部,但是内部定义该属性为readwrite,为了内部能直接改变属性值。

  12. 和class extension不同,associated reference 不影响原始class的定义和实现,所以说即便没有对原始数据的访问权限,也可以使用。
    objc_setAssociatedObject

  13. NSArray和NSDictionary只可以用来收集OC对象,其它对象必须封装在OC对象之内才可以init到上述类型之中。

  14. NSNumber是一个类簇。意思是当你在运行时创建一个实例时,你会得到一个具体的子类来存储提供的值,就当那个对象是NSNumber的子类就好。

  15. 在sort的时候:
    a) NSArray类型由于是不可变,所以调用sort方法会返回一个新的array对象。
    b) Mutable的Array可以直接sort,不需要返回新array

  16. 如果在collection中想表达”no object”,可以使用NSNull类

  17. 很多collection类实现了NSFastEnumeration协议,包括NSArray,NSSet和NSDictionary。

  18. 在快速遍历collection时是不可以修改值的,即便是mutable的变量。如果你打算add或者remove一个对象,会导致一个运行时异常。

  19. 通过反复调用nextObject也可以遍历所有内容,比如:
    while((eachObject = [enumerator nextObject])){……}

  20. 如果真的想在条件处赋值,则需要将赋值语句加括号,比如:
    if((someVar = YES))

  21. 用快速遍历比手工用遍历对象要快。

  22. 如果在block之后修改了block内部读取的值,因为该值被capture了,所以在block生效时不会收影响。比如:
    int value = 42;
    void (^testBlock)(void) = ^{ NSLog(“%d”,value);}//print 42 while ext
    value = 84;
    testBlock();

  23. 如果想改变block中的引用值,需要用__block标志。这时候该值的生命周期在block内外都是有效的。
    __block int value = 42;
    void (^testBlock)(void) = ^{ NSLog(“%d”,value);}//print 84 while ext
    value = 84;
    testBlock();

  24. block类型应当设置其类型为copy,因为block需要copy以保证保持原始调用域的环境。不过在ARC下不需要考虑这个问题,因为block自动会以copy形式定义。

  25. 下述方法遍历每一个键值对更加方便:
    NSDictionary *dict = …
    [dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj,BOOL *stop)
    {
    NSLog(“key:%@,value:%@”,key,object);
    }

  26. 创建NSError时,需要定义自己的errorDomain,应该形式如下:
    com.companyName.appOrFrameworkName.ErrorDomain
    创建完整的Error如下:
    NSString *domain = @”com.MyCompany.MyApplication.ErrorDomain”;
    NSString *desc = NSLocalizedString(@”Unable to…”,@””);
    NSDictionary *userInfo = @{NSLocalizedDescriptionKey:desc};
    NSError *error = [NSError errorWithDomain:domain code:-101 userInfo:userInfo];

  27. 自定义类应当使用三个字母的前缀。命名最好用名词,以表示所指,例如:NSWindow, CAAnimation等

  28. 如果method需要一个或多个参数,方法名需要暗示出每一个参数,比如:
    subStringFromIndex: writeToUrl:

  29. 方法名的第一部分应当暗示方法的主要意图或者方法的返回值。如果返回值很重要,可以用复合词,比如mutableCopy. 如果一个方法返回一个action,第一个单词应当暗示那个action,例如write…或者enumerate…

  30. 如果一个方法需要传入error参数,此参数应该排在最后;如果一个方法含有block,block应当排在最后,为了使得方法名在调用时尽量处于统一行,方便可读。因此尽量在方法中少包含block变量。

  31. 少写缩写。

  32. 工厂类方法在创建时应当以类名字作为开头(无前缀),除非类的子类存在相同的工厂方法了。例如 [NSMutableArray array];

  33. 只要见到mutable就是深拷贝。
    列表:

[immutableObject copy]//浅copy
[immutableObject mutableCopy]//单层深copy

[mutableObject copy]//单层深copy
[mutableObject mutableCopy]//单层深copy

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容