Object-C2.0学习笔记(下)

8.继承

//在接口文件中通常这样指定根类
@interface Fraction:NSObject
...
@end

类Fraction是从NSObject派生来的,因NSObject是层次结构的最顶端,因此称为根类。


9.多态、动态类型和动态绑定

多态:相同的名称,不同的类。

动态绑定和id类型:id可以用来存储属于任何类的对象。

编译时和运行时检查:编译时无法确定只能在运行时检查

id数据类型和静态类型

使用@try处理异常


10.变量和数据类型

变量的作用域,对象的初始化方法,数据类型。

//设置器和访问器
#import <Foundation/Foundation.h>
/*接口部分*/
@interface Person : NSObject{
    int myNumber;//实例变量
}
- (void)print;//打印,返回为空
- (void)setMyNumber : (int) number;//设置器
- (void)myNumber : (int) number;//访问器
@end


#import "Person.h"
/*实现部分*/
@implementation Person
- (void)print{
    NSLog(@"Person number is :%d", myNumber);//打印值
}
- (void)setMyNumber : (int) number{
    myNumber = number;
}

- (int) myNumber : (int) number{
    return myNumber;//获取myNumber值
}
@end

11.分类和协议

使用分类以模块的方式向类添加方法,创建标准化方法列表供他人实现。


12.预处理程序

预处理程序语句使用#标记,这个符号必须是一行中的第一个非空格字符。


13.基本C语言特性

id类型是通用的指针类型

实例变量存储在结构中

对象变量实际上是指针

方法是函数,而消息表达式是函数调用。


14.Foundation框架

Foundation框架为所有的程序奠定基础,可允许一些基本对象,如数字,字符串,时间,日期,自动化的内存管理等。


15.数字、字符串集合

Foundation框架提供一些基本对象:数字,字符串,集合,数组,字典和集合形式使用的成组对象。

Foundation框架包括大量的类,方法,函数。在Mac OS X下,约有125个可用头文件,可通过

#import <Foundation/Foundation.h>

的简便形式进行导入,因为Foundation.h文件导入了Foundation所有的头文件,所有不用担心是否导入了正确

的头文件。XCode会自动将这个头文件插入程序。

预编译的头文件可以避免额外的开销。预编译的头文件是编译器预先处理过的文件。


16.使用文件

用Foundation框架可以对文件或目录执行基本操作,这些操作由管理文件和目录的NSFileManager类提供,这个类的

方法具有功能如下:

创建一个新文件

从现有文件中读取数据

将数据写入文件

重命名文件

删除文件

测试文件是否存在

确定文件的大小和其他属性

复制文件

测试两个文件的内容是否相同。

NSBundle提供了在应用中使用包(bundle)的方法,包括搜索包中的特定资源(如图片……

NSURL类的中URL方法可以从网上读取数据。

NSFileHandle类的方法可用于各种设备或套接字,可以实现的功能有:

打开一个文件,执行读,写或更新(读取和写入)操作。

在文件中查找指定位置。

从文件中读取特定数目的字节,或将指定数目的字节写入文件中。


17.内存管理和自动引用计数

自动垃圾收集

手工引用计数和自动释放池

自动引用计数(ARC)


18.复制对象

深复制:

浅复制:


19.归档

在OCK中,归档是一个过程,即用某种格式来保存一个或多个对象,以便以后还原这些对象。通常,这个过程

包括将(多个)对象写入文件中,以便以后读取该对象。

两种归档数据的方法:属性列表,带键值的编码。


20.Cocoa和Cocoa Touch简介

Cocoa是一种为Mac OS X应用程序提供了丰富用户体验的框架,实际由三个框架组成:

Foundation框架

Core Date框架:便于数据库存储和管理数据

Application Kit(AppKit)框架:提供与窗口,按钮,列表等相关的类。

注:

Cocoa框架应用于Mac OS X桌面和笔记本电脑应用程序的开发,而Cocoa Touch框架应用

于ios设备上应用程序的开发。

Cocoa和Cocoa Touch都有Foundation和Core Data框架。但在Cocoa Touch下,UIKit代替了APPKit框架。

Cocoa Touch还提供了使用陀螺仪和加速器(与GPS和Wifi一样能跟踪位置)的类和触摸式界面。


21.编写IOS程序

//iPhone_1 ViewController.h
import <UIKit/UIKit.h>
@interface iPhone_1ViewController : UIViewController 
@property (strong, nonatomic) IBOutlet UILabel *display; 
-(IBAction) click1;
 @end 
 //iPhone_1 ViewController.m
 @implementation iPhone_1ViewController 
 @synthesize display; 
 -(IBAction) click1{ display.text = @"1"; } 
 //此处未显示Xcode插入的其他方法 
 //... @end
注:通过click1方法设置UILabel的text属性将出口变量display设为字符串"1".再将按钮的按下动作连接到这个 方法,它能执行预定的操作,将1放入iphone窗口显示。


iPhone分数计算器

//Fraction_CalculatorViewController.h接口文件
#import <UIKit/UIKit.h>
#import "Calculator.h"

@interface Fraction_CalculatorViewController : UIViewController
@property (strong, nonatomic) IBOutlet UILabel *display;
-(void) processDgit: (int) digit;
-(void) processOp: (char) theOp;
-(void) storeFracPart;
//数字键
-(IBAction) clickDigit: (UIButton *) sender
//算术操作键
-(IBAcion) clickPlus;
-(IBAcion) clickMinus;
-(IBAcion) clickMultiply;
-(IBAcion) clickDivide;
//Misc键
-(IBAcion) clickOver;
-(IBAcion) clickEquals;
-(IBAcion) clickClear;
@end
//Fraction_CalculatorViewController.m
#import "Fraction_CalculatorViewController.h"
@implementation Fraction_CalculatorViewController{
    char op;
    int currentNumber;
    BOOL firstOperand,isNumberator;
    Calculator *myCalculator;
    NSMutableString *displayString;
}
@synthesize display;
-(void) viewDidLoad{
//覆盖应用程序载入的自定义方法
firstOperand = YES;
isNumerator = YES;
displayString = [NSMutableString stringWithCapacity:40];
myCalculator = [[Calculator alloc] init];
}
-(void) processDigit:(int) digit{
currentNumber = currentNumber * 10 + digit;
[displayString appendString:[NSString stringWithFormat:@"%i",digit]];
display.text = displayString;
}
-(IBAction) clickDigit:(UIButton *) sender{
int digit = sender.tag;
[self processDigit:digit];
}

处理分数的Calculator类

//Calculator.h接口文件
#import <UIKit/UIKit.h>
#import "Fraction.h"
@interface Calculator : NSObject
@property (strong, nonatomic) Fraction *operand1, *operand2, *accumulator;
-(Fraction *) performOperation:(char) op;
-(void) clear;
@end

//Calculator.m实现文件
#import "Calculator.h"
@implementation Calculator
@synthesize operand1, operand2, accumulator;
-(id) init{
    self = [super init];
    if (self){
        operand1 = [[Fraction alloc] init];
        operand2 = [[Fraction alloc] init];
        accumulator = [[Fraction alloc] init];
    }
    return self;
}
-(void) clear{
    accumulator.numerator = 0;
    accumulator.denominator = 0;
}
-(Fraction *)performOperation:(char) op{
    Fraction *result;
    switch(op){
        case '+':result = [operand1 add:operand2];break;
        case '-':result = [operand1 subtract:operand2];break;
        case '*':result = [operand1 multiply:operand2];break;
        case '/':result = [operand1 divide:operand2];break;
    }
    accumulator.numerator = result.numerator;
    accumulator.denominator = result.denominator;
    return accumulator;    
}
@end


附录:

gcc是在Mac OS X上编译OC程序所用的标准编译器

gdb由gcc编译的程序的标准调试工具


你可能感兴趣的:(Object-C2.0学习笔记(下))