《Objective-C基础教程》学习笔记第十一-十三章
来源:互联网 发布:投影仪突然连不上网络 编辑:程序博客网 时间:2024/04/28 04:06
1. 在对对象属性执行操作时,可以利用@property和@synthesize减少需要编写的代码数量(代替setter和getter),同时还可以指定property的属性(readwrite, readonly, copy, retain, assign)。如果需要访问对象的属性,可以用点表达式,比如tire.rainHandling = 20。
@interface Car : NSObject {
NSString *name;
NSMutableArray *tires;
Engine *engine;
- (void) setTire: (Tire *) tire
atIndex: (int) index;
- (Tire *) tireAtIndex: (int) index;
}
@property (readwrite, copy) NSString *name;
@property (retain) Engine *engine;
@end
@implementation Car
@synthesize name = appellation;
@synthesize engine;
......
@end
2. 使用@synthesize还可以改变公开的 属性名称,比如@synthesize name = appellation在创建-setName:和-name的同时,还会把公开的属性名改为appellation。
3. 声明类别的方法:
@interface NSString (NumberConvenience)
-(NSNumber *) lengthAsNumber
@end
类别的实现
@implementation NSString (NumberConvenience)
-(NSNumber *) lengthAsNumber
{
unsigned int length = [self length]
return ([NSNumber numberWithUnsignedInt: length]);
}
@end
4. 类别(Category)的限制是(1)无法向类中添加新的实例变量(2)如果类别的方法与类方法重名,类别方法会覆盖类方法。
5. 利用类别可以把大型的类实现分散到多个不同的.m文件中。比如AppKit提供的NSWindow类为例,利用类别将Keyboard、ToolBar、Drag等方法组织到逻辑分组中。
6. 使用类别创建前向引用,即把用到的方法隐藏到类别声明中避免编译器警告信息。7. 创建一个NSObject的类别称为“创建一个非正式协议”,使用非正式协议可用于实现委托,委托对象可以只实现想要的方法,利用“响应选择器”可以询问委托对象是否实现某个方法。比如Car类的的setTire:atIndex:方法的选择器是@selector(setTire:atIndex:),那么询问Car是否能够响应setEngine消息的是:
Car *car = [[Car alloc] init];
if ([car respondsToSelector: @selector(setTire:atIndex:)]) {
NSLog(@"yowza!");
}
8. 正式协议就像java的接口一样,声明方法如下:
@protocal NSCopying
-(id) copyWithZone: (NSZone *)zone;
@end
采用协议的方法如下:
@interface Car: NSObject <NSCopying>
{
// instance variables
}
// method
@end // Car
9. 在使用的数据类型 中为实例变量和方法参数指定协议名称,可以给编译器提供更多一点的信息,帮助检查代码 错误。例如:
-(void) setObjectValue: (id<NSCopying>) obj;表示该方法要求对象遵守NSCopying协议。
10. Objective-C 2.0增加了两个新的协议修饰符@optional和@required
@protocal BaseballPlayer
-(void) drawHugeSalary;
@optional
-(void)slideHome;
-(void)catchBall;
-(void)throwBall;
- 《Objective-C基础教程》学习笔记第十一-十三章
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十一章 属性
- Objective-C学习笔记第十一章特性
- 《Objective-C基础教程》学习笔记第二章
- 《Objective-C基础教程》学习笔记第八章
- Objective-C基础教程学习笔记
- python基础教程第十一章学习笔记
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十一章 分类和协议
- 《Objective-C基础教程》学习笔记第三-六章
- 《Objective-C基础教程》学习笔记第九-十章
- 读《Objective-C基础教程》学习笔记
- Objective-C基础教程学习笔记 内存管理
- Objective-C基础教程学习笔记(附…
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第二章~第七章
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第八章 Foudation Kit 介绍
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第九章 内存管理
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十章 对象初始化
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十二章 类别
- Java强引用、 软引用、 弱引用、虚引用
- 实现直接插入排序算法
- [PHP]解决PHP和MySQL的中文乱码问题
- Philips Economy Audio Codec Data Sheet Note(UDA1341TS)
- 矩形区域边缘
- 《Objective-C基础教程》学习笔记第十一-十三章
- HSV颜色模型
- ZOJ 1813 Biker's Trip Odometer
- Hybrid App 开发初探:使用 WebView 装载页面
- 让Chrome的HTML5 video/audio tag支持更多种音视频格式
- cocos2d-x 菜鸟进阶篇(三) scrollView(下)
- 60个精美的移动开发PSD素材资源免费下载 - 上篇
- 正则表达式匹配规则
- Chrome Extension 开发文档 (360极速浏览器应用开放平台)