类的申明放在 .h 文件中,类的实现放在 .m 文件中
类分为可变类、不可变类
2.1. 必须在不可变对象创建时,设置不可变对象的内容。不可变对象在创建后,对象的值不能被其它对象改变
2.2. 可变对象的值,在对象创建之后,在运行时,可变对象的值可以被其它对象改变继承是链式的,如果在类参考文档中,在某个类及它的父类中找不到某个方法,请根据继承链路逐一查找
类申明的关键字:interface
-
申明类的语法:
@interface SimpleClass : NSObject @end
属性性质的申明在
property
关键字之后,在一对圆括号之间被指定,用于标识属性是否只读-
方法申明:
- (void)someMethodWithFirstValue:(SomeType)value1 secondValue:(AnotherType)value2;
在应用或项目中(包括第三方类库),类名必须唯一
-
类方法申明:
+ (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc;
对象发送消息
10.1 [someObject doSomething];id 关键字表示:某种对象类型
-
创建对象并初始化
12.1XYZPerson *object = [XYZPerson new];
12.2
XYZPerson *object = [[XYZPerson alloc] init];
-
字面值也可以创建对象
NSString *someString = @"Hello, World!"; NSNumber *myBOOL = @YES; NSNumber *myFloat = @3.14f; NSNumber *myInt = @42; NSNumber *myLong = @42L;
-
对象比较
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 }
nil 说明
15.1 初始化数量值时,如果不赋初值,请把它设置为 nil,否则,变量里会有前一个堆留下的垃圾值
15.2 对象指针不需要设置 nil,因为如果你不给它设置初始值,编译器会帮你把它设置为 nil
15.3 给 nil 发送消息是安全的,如果你给 nil 发送消息,实际上,什么也不会发生
15.4 判断对象是否为 nil 的两种方式
if (object == nil)
if (!object)
访问器(accssor)—— 编译器自动生成
16.1 用于访问值的方法(getter 方法)拥有与属性一样的名字
16.2 用于设置值的方法(setter 方法)用 set 开头的单词命名,并且,其中的属性名首字母要大写-
属性特征词
17.1 只读@property (readonly) NSString *fullName;
17.2 设置访问器格式
@property (getter=isFinished) BOOL finished;
-
用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 为了避免未定义的行为(类目里的方法名与被扩展类中的已有方法名重名),最佳的做法是给类目中的方法名称前添加一个前缀
-
用extension来实现类的扩展
19.1 类扩展在编译时,只能被添加到已有源代码的一类中
19.2 类扩展的方法申明在原始类的 @implementation 块中
19.3 语法@interface ClassName () @end
-
协议(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
-
使用 NSNull 代替 nil
21.1 不能在集合中添加 nil,因为在 Object-C 中,nil 表示没有对象,集合中需要使用 NSNullNSArray *array = @[ @"string", @42, [NSNull null] ];
Object-C 学习笔记
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 字符串处理认识->NSString是一个Unicode编码、16位字符的字符序列。语法:NSString *som...
- 苹果官方文档翻译 《Objective-C语言编程》(Programming with Objective-C) ...
- 类和对象 类型系统 引用类型 reference type 类class 指针 pointer 块 block 类...