Object-C 学习笔记

  1. 类的申明放在 .h 文件中,类的实现放在 .m 文件中

  2. 类分为可变类、不可变类
    2.1. 必须在不可变对象创建时,设置不可变对象的内容。不可变对象在创建后,对象的值不能被其它对象改变
    2.2. 可变对象的值,在对象创建之后,在运行时,可变对象的值可以被其它对象改变

  3. 继承是链式的,如果在类参考文档中,在某个类及它的父类中找不到某个方法,请根据继承链路逐一查找

  4. 类申明的关键字:interface

  5. 申明类的语法:

    @interface SimpleClass : NSObject 
     
    @end 
    
  6. 属性性质的申明在property关键字之后,在一对圆括号之间被指定,用于标识属性是否只读

  7. 方法申明:

    - (void)someMethodWithFirstValue:(SomeType)value1 secondValue:(AnotherType)value2; 
    
  8. 在应用或项目中(包括第三方类库),类名必须唯一

  9. 类方法申明:

    + (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc;
    
  10. 对象发送消息
    10.1 [someObject doSomething];

  11. id 关键字表示:某种对象类型

  12. 创建对象并初始化
    12.1

    XYZPerson *object = [XYZPerson new];
    

    12.2

    XYZPerson *object = [[XYZPerson alloc] init];
    
  13. 字面值也可以创建对象

    NSString *someString = @"Hello, World!";
    NSNumber *myBOOL = @YES;
    NSNumber *myFloat = @3.14f;
    NSNumber *myInt = @42;
    NSNumber *myLong = @42L;
    
  14. 对象比较
    14.1 比较两个指针是否指向同一对象

    if (firstPerson == secondPerson) {
        // firstPerson is the same object as secondPerson
    }
    

    14.2 判断两个对象是否表示同一个值

    if ([firstPerson isEqual:secondPerson]) {
        // firstPerson is identical to secondPerson
    }
    

    14.4 某些类(如:NSString,NSNumber,NSDate)可以使用方法比较大小

    if ([someDate compare:anotherDate] == NSOrderedAscending) {
        // someDate is earlier than anotherDate
    }
    
  15. nil 说明
    15.1 初始化数量值时,如果不赋初值,请把它设置为 nil,否则,变量里会有前一个堆留下的垃圾值
    15.2 对象指针不需要设置 nil,因为如果你不给它设置初始值,编译器会帮你把它设置为 nil
    15.3 给 nil 发送消息是安全的,如果你给 nil 发送消息,实际上,什么也不会发生
    15.4 判断对象是否为 nil 的两种方式
    if (object == nil)
    if (!object)

  16. 访问器(accssor)—— 编译器自动生成
    16.1 用于访问值的方法(getter 方法)拥有与属性一样的名字
    16.2 用于设置值的方法(setter 方法)用 set 开头的单词命名,并且,其中的属性名首字母要大写

  17. 属性特征词
    17.1 只读

    @property (readonly) NSString *fullName;
    

    17.2 设置访问器格式

    @property (getter=isFinished) BOOL finished;
    
  18. 用category(类目)对现有类添加方法
    18.1 定义

    #import "XYZPerson.h"
    @interface XYZPerson (XYZPersonNameDisplayAdditions)
    - (NSString *)lastNameFirstNameString;
    @end
    

    18.2 实现

    #import "XYZPerson+XYZPersonNameDisplayAdditions.h"
    @implementation XYZPerson (XYZPersonNameDisplayAdditions)
    - (NSString *)lastNameFirstNameString {
        return [NSString stringWithFormat:@"%@, %@", self.lastName, self.firstName];
    }
    @end
    

    18.3 为了避免未定义的行为(类目里的方法名与被扩展类中的已有方法名重名),最佳的做法是给类目中的方法名称前添加一个前缀

  19. 用extension来实现类的扩展
    19.1 类扩展在编译时,只能被添加到已有源代码的一类中
    19.2 类扩展的方法申明在原始类的 @implementation 块中
    19.3 语法

    @interface ClassName ()
    
    @end
    
  20. 协议(protocol)定义消息传递合同
    20.1 一个协议声明的方法和属性,独立于任何特定的类
    20.2 接口和数据源属性通常标记为弱(week
    20.3 使用 @optional 指令把协议的方法标识为可选。@optional 指令适用于遵循它的任何方法 ,直到协议定义的最后,或者遇到另一个指令之前,例如 @required

    @protocol XYZPieChartViewDataSource
    - (NSUInteger)numberOfSegments;
    - (CGFloat)sizeOfSegmentAtIndex:(NSUInteger)segmentIndex;
    @optional
    - (NSString *)titleForSegmentAtIndex:(NSUInteger)segmentIndex;
    - (BOOL)shouldExplodeSegmentAtIndex:(NSUInteger)segmentIndex;
    @required
    - (UIColor *)colorForSegmentAtIndex:(NSUInteger)segmentIndex;
    @end
    
  21. 使用 NSNull 代替 nil
    21.1 不能在集合中添加 nil,因为在 Object-C 中,nil 表示没有对象,集合中需要使用 NSNull

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

推荐阅读更多精彩内容