现在的位置: 首页 > 综合 > 正文

读<深入浅出Object-C2.0 >[草记]

2012年10月13日 ⁄ 综合 ⁄ 共 6574字 ⁄ 字号 评论关闭

心血来潮 这两天找了一本<深入浅出Object-C2.0 >

边看边写,主要把注意点草草记录下来,以后可以稍微查看下

这本书比较入门,理论上没C基础都可以学,里面有介绍C基础已经Object-C

类的命名:

----------------------------------------------------------------------
Object-C中:
子类 :父类
@interface MyObject :NSObject
@end

C++中:
class MyObject : public NSObject{

};

实例变量的声明:
----------------------------------------------------------------------
@interface MyObject :NSObject
{
int count;
int index;
}
@end

在@interface 与@end 中间追加{}后加入

实例方法的声明:
----------------------------------------------------------------------
@interface MyObject :NSObject
{
int count;
int index;
}

- (int)count;

@end

★声明无参数的方法的语法为:
- (返回值类型)方法名;
☆开头的"-"不可少,间隔一个空格后

//下面的是C++的声明方法;
Class MyObject : public NSObject{
int count;
int index;
int count();
}

★一个参数的方法

@interface MyObject :NSObject
{
int count;
int index;
}

- (int)count;
- (void)setCount:(int)count;
@end

☆- (返回值类型)函数名 :(参数类型)参数名;

//下面的是C++的声明方法;
Class MyObject :public NSObject{
int count;
int index;
int count();
void setCount(int count);
}
★多个参数的方法
@interface MyObject :NSObject
{
int count;
int index;
}

- (int)count;
- (void)setCount:(int)count;
- (void)setCount:(int)count andIndex:(int)index;
@end

☆- (返回值类型)函数名 :(参数类型)参数名  标签:(参数类型)参数名;

★编写方法体
#import "MyObject.h"
@implementation MyObject
-(int)count
{
return count;
}
@end


//C++的代码
int MyObject::count(){
return count;
}

★实例对象专用的变量类型
MyObject* object;
NSString* string;

特殊类型
id类型
nil类型
在条件表达式中使用对象变量
if(string){
//string对象有效时处理
}else{
//string对象无效时处理

}

★方法调用

MyObject* object 
//将MyObject实例化
...
//调用count方法
int count;
count = [object count];

返回值 = [实例 方法名]


首先有返回值,方法需要等号右边有中括号
其他多参数的方法的调用

[object setCount:10]
[object setCount:10 andIndex:6]

//C++中

MyObject* objecty;
object = new MyObject();
//调用count方法
int count;
count = object->count();

object->setCount(10);
object->setCountandIndex(12,16);

★类方法的调用

跟实例方法调用类似
int count;
count = [MyObject count];

★对象为nil的情况下
当变量为nil时,任何调用都将被忽略,而不会出现任何的错误。不管类型如何都返回0.


★retain和release方法

NSObject
-(id)retain
参照本对象,参照统计值加1,返回自己作为返回值,经常用于对象的实例化操作
-(void)release
解除对本对象的参照,参照统计值减1,如果参照统计值变为0,则释放本对象

★类的实例化与初始化
实例化方法alloc
NSObject
+(id)alloc
进行累的实例化,返回值为实例化对象


最基本的初始化方法是init()
NSObject
+(id)init

实例化的基本动作其实是alloc与init方法的连续调用
MyObject* object;
object = [[MyObject alloc] init]

连续调用[[类名 alloc] init]连续调用 相当于C++中的new,因为OC里面没有构造方法

自动释放autorelease方法
NSObject
+(id)autorelease
进行实例的自动释放。返回为自己
例如
MyObject* object;
object = [[[MyObject alloc] init] autorelease];


实例的释放dealloc
NSObject
-(void)dealloc在实例释放前调用

-(void) dealloc
{
[document release];

[super dealloc];//务必要加上去
}

临时对象
NSAutoreleasePool
自动释放是由NSAutoreleasePool实现的,定时垃圾袋
创建实例,调用注册所有对象的release。。。



2012-09-14 09:54:06
-------------------------------------------------------------------------------
NSString与NSMutableString
NSObject <- NSString <- NSMutableString
使用NSString,一旦生成实例后不可改变字符串的内容
NSString用于处理固定的,NSMutableString用于处理可变的

Unicode支持所有语言

字符串的生成
-------------------------------------------------------------------------------
使用@""形式创建新字符串
//C字符串
char* cString ="This is C String";
//NSString实例
NSString string = @"This is Nsstring";
因为在Object-C里面C也可以正常使用,但是两者是完全不同的


★创建中文字符串
stringWithCString:enconding:

initWithCString:encoding:

NSObject

+(id)stringWithCString:(const char*)cString
encoding:(NSStringEncoding)encoding;
-(id)initWithCString:(const char*)cString
encoding:(NSStringEncoding)encoding;

前一个方法是创建自动释放类型的实例,后一个方法是在执行alloc方法后,进行初始化的

使用格式化创建字符串
NSObject
+(id)stringWithFormat:(NSString*)format...
-(id)initWithFormat:(NSString*)format...

新的替换符%@ 

例子
-------------------------------------------------------------------------------
NSString* str1
str1 = @"Mac";

//指定NSString的实例来创建字符串
NSString* str2
str2 = [NSString stringWithFormat:@"%@ pro",str1];
NSLog(str2);
//str2 的值为"Mac Pro"

-------------------------------------------------------------------------------

NSRange
应用:
NSRange range = NSMakeRange(0,5);
NSLog(@"location is %d , length is %d ", range.location , range.length); 

计算字符串的长度
NSString* str;
str = @"Mac os pro";
unsigned int length;
length = [str length];
NSLog(@"lenght is %d",length)
//length 的长度为10

两个字符串的连接
-(NSString*)stringByAppendingString:(NSString*)string
-(NSString*)stringByAppendingFormat:(NSString*)format

NSMutableString 的生成

//
NSMutableString *string =[NSMutableString stringWithString:@"Mac"];

追加字符串
-------------------------------------------------------------------------------
NSMutableString* string = [NSMutableString string];

//追加字符串
[string appendString:@"mac"];
-------------------------------------------------------------------------------

插入
insertString
[string insertString:@"OS" atIndex:4];

删除
[string deletecharactersInRange:NSMakeRange(0,1)];

字符串的比较
isEqualToString:
比较前置串和后置串,
hasPrefix: 与 hasSuffix:
NSString *string1 = @"Mac Pro";
result = [string1 hasPrefix:@"mac"];//返回的是yes

字符串的检索
rangeOfString:
如果找到字符串,侧返回范围

-(NSRange)rangeOfString:(NSString*)subString;
-(NSRange)rangeOfString:(NSString*)subString option:(unsigned)mask;
-(NSRange)rangeOfString:(NSString*)subString option:(unsigned)mask range:(NSRange)range;

mask选项
...

抽取部分字符串
substringToIndex,substringFromIndex,substringWithRange

读写文本文件
stringWithContentsOfFile
initWithContentsOfFile

//读取文本文件,在path中指定合适的路径
NSString *text;
NSString *path = @"/text.txt";
NSError *error;
text = [NSString stringwithContentsOfFile:path 
encoding:NSUTF8StringEncoding error:$error];
if(text){
//读入成功的代码
}else{
NSLog([error localizedDescription]);
}

输出文本文件
writeToFile



数组
★-------------------------------------------------------------------------------

NSArray 与 NSMutableArray

NSString *name[6];

NSArray *array;
array =[NSArray arrayWithObjects:@"Tom",@"Tom",@"Tom",@"Tom",nil];
★最后一个参数指定为nil;



数组的长度
[array count];

通过索引取得对象
ObjectAtIndex:

使用NSEnumerator取得对象
nextObject方法
objectEnumerator方法
NSEnumerator *enumerator;
enumerator =[array objectEnumerator];
...
while(str = [enumerator nextObject]{
//输出
....
}

使用高速枚举法取得对象

for(变量定义 in 对象集合){
...
}


对象的追加与删除
创建空数组
array

对象追加
addObject:(id)object
最近数组array中包含的所有对象
addObjectsFormArray:(NSArray *)array
在索引index中插入对象
insertObject
将索引index出的对象替换成对象object
replaceObjectAtIndex
将数组中所有的对象替换为数组array中的元素
setArray:

对象的删除
removeAllObjects
...

字典
"cpu" => "intel xx"

键值对
NSDictionary
NSMutableDictionary
指定键值创建
NSDictionary *dict;
dict = [NSDictionary dictionaryWithObject:@"Inter core " forKey:@"cpu"];


array =[NSArray arrayWithObjects:@"Tom",@"Tom",@"Tom",@"Tom",nil];
array2 =[NSArray arrayWithObjects:@"Tom",@"Tom",@"Tom",@"Tom",nil];
dict = [NSDictionary dictionaryWithObjects:array forKeys:array2];

键值对的形式创建

dict = [NSDictionary dictionaryWithObjectsAndKeys:@"key1",@"value1",@"key2",@"value2",nil];

键值的取得
NSString *cpuType = [dict objectForKey:@"cpu"];

取得全部键值对
NSEnumerator *e = [dict KeyEnumerator];
while (key = [e nextObject]){
NSString *value;
value = [dict objectForKey:key];
//输出...
}

键值追加

生成空的字典
dictionary

追加
setObject:(id)object forKey:(id)key;
删除
removeAllObjects


-------------------------------------------------------------------------------

包装类
-------------------------------------------------------------------------------
NSNumber

对象的等价与同值
同值判断
isEqual
isEqualToString

★键对象不是原始的,而是复制的,但是值则是直接追加的



-------------------------------------------------------------------------------
表格视图
NSTableView 与 NSTableColumn









抱歉!评论已关闭.