心血来潮 这两天找了一本<深入浅出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