标签:ios开发 objective-c 面向对象 cocoa touch 框架
快速概要:
光标放在需要搜索的类、方法或变量上,按住Option键,同时单击鼠标,你会看到所选择内容的快速概要。
在面板的右上角注意到有两个图标:第一个是一本书,第二个是一个字符h。
单击那个书的图标,Xcode会查找选择的类、协议、定义或者方法的相关文档。
单击字符h的图标,将会显示包含选择项目定义的头文件。
MAC OS X在线参考库,地址是点击打开链接。
#import <Foundation/Foundation.h>
实际上,因为Foundation.h文件导入Foundation所有的头文件,所以不必担心是否导入正确的头文件。
但使用这条语句会明显增加程序的编译时间。
所以,一般import用到的头文件。不要用太大的import。
基本数据类型:
int、 char、 float和double都不是类,
不具有方法、 成员变量和属性, 以及面向对象的特征。
为了实现“一切都是对象” 的承诺,
因此在Foundation框架中使用NSNumber类来封装这些数字类型。
这样数字就具有了面向对象的基本特征了。
也就是说:如果需要存储基本数据类型(包括char数据类型),可以使用NSNumber类,
它会依据这些数据的类型创建对象。
对于每种基本数据类型,类方法都能为它创建一个NSNumber对象,并设置为指定的值。
NSNumber *intNumber= [NSNumber numberWithInteger:80]; NSNumber *floatNumber = [NSNumber numberWithFloat: 80.00]; int myint = [intNumber intValue]; float myfloat = [floatNumber floatValue];
注意,方法numberWithInt:和numberWithInteger:使用有些差别,遵循以下一些规则:
1)如果使用numberWithInt:方法创建一个整型数,需要使用intValue获取它的值,使用%i作为格式化字符串显示它的值。
2)如果使用numberWithInteger:方法创建一个整型数,需要使用integerValue获取它的值,也可以转换成long显示或使用stringWithFormat:将它格式化为字符串。使用%li作为格式化字符串。
if ([intNumber isEqualToNumber: floatNumber] == YES) {
NSLog(@"相等");
} else {
NSLog(@"不相等");
}
if ([intNumber compare: myNumber] ==
NSOrderedAscending) {
NSLog(@"第一个数小于第二个数");
}NSOrderedAscending是枚举类型NSComparisonResult的其中成员, 代表第一个数小于第二个数, NSSTring的类,用于处理字符串对象。然而C样式的字符串由char字符组成,NSString对象由unichar字符组成。
要使用Objective-C语言创建一个常量字符串对象,需要在字符串开头放置一个@字符。
创建字符串对象时,会创建一个内容不可更改的对象,这称为不可变对象。
需要制定一个范围确定子字符串,使用特殊的数据类型NSRange类创建对象。
实际上,它是结构的typedef定义,包含location和length两个成员。
如果没有找到这个字符串,则返回范围的location成员被设置为NSNotFound。
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *str1 = @"aBcDeFgHiJk";
NSString *str2 = @"12345";
NSString *res;
NSComparisonResult compareResult;
NSRange subRange;
//字符个数
NSLog(@"字符串str1长度: %i",[str1 length]);
//拷贝字符串到res
res = [NSString stringWithString: str1];
NSLog(@"拷贝: %@", res);
//拷贝字符串到str1尾部
str2 = [str1 stringByAppendingString: str2];
NSLog(@"连接字符串: %@", str2);
//测试字符串相等
if ([str1 isEqualToString: res] == YES) {
NSLog(@"str1 == res");
} else {
NSLog(@"str1 != res");
}
//测试字符串 < > ==
compareResult = [str1 compare: str2];
if (compareResult == NSOrderedAscending) {
NSLog(@ "str1 < str2");
} else if (compareResult == NSOrderedSame) {
NSLog(@ "str1 == str2");
} else {
NSLog(@ "str1 > str2");
}
res = [str1 uppercaseString];
NSLog(@"大写字符串:%@", res);
res = [str1 lowercaseString];
NSLog(@"小写字符串:%@", res);
NSLog(@"原始字符串: %@", str1);
//获得前三个数
res = [str1 substringToIndex: 3];
NSLog(@"字符串str1的前三个字符: %@",res);
res = [str1 substringFromIndex: 4];
NSLog(@"截取字符串,从第索引4到尾部: %@",res);
res = [[str1 substringFromIndex: 3] substringToIndex: 2];
NSLog(@"截取字符串,从第索引3到5: %@",res);
//字符串查找
subRange = [str2 rangeOfString: @"34"];
if (subRange.location == NSNotFound) {
NSLog(@"字符串没有找到");
} else {
NSLog (@"找到的字符串索引 %i 长度是 %i",
subRange.location, subRange.length);
}
[pool drain];
return 0;
}NSMutableString类可以用来创建可以更改字符的字符串对象。
注意,如果替换字符串中还包括搜索字符串(如:使用字符串“ax”替换字符串“a”),
那么将会陷入无限循环。
其实,这个是和它的实现原理有关系,一般这种替换使用的方法使用了递归调用。
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *str1 = @"Objective C";
NSString *search,*replace;
NSMutableString *mstr;
NSRange substr;
//从不可变的字符创建可变字符串对象
mstr = [NSMutableString stringWithString: str1];
NSLog(@" %@", mstr);
//插入字符串
[mstr insertString: @ " Java" atIndex: 9];
NSLog(@" %@", mstr);
//具有连接效果的插入字符串
[mstr insertString: @ " and C++"atIndex: [mstr length]];
NSLog(@" %@", mstr);
//字符串连接方法
[mstr appendString: @ " and C"];
NSLog(@" %@", mstr);
//使用NSRange删除字符串
[mstr deleteCharactersInRange:NSMakeRange(16, 13)];
NSLog(@" %@", mstr);
//查找字符串位置
substr = [mstr rangeOfString: @ "string B and"];
if (substr.location != NSNotFound) {
[mstr deleteCharactersInRange: substr];
NSLog(@" %@", mstr);
}
//直接设置可变字符串
[mstr setString: @ "This is string A "];
NSLog(@" %@", mstr);
[mstr replaceCharactersInRange: NSMakeRange(8, 8)
withString: @ "a mutable string "];
NSLog(@" %@", mstr);
//查找和替换
search = @"This is ";
replace = @"An example of ";
substr = [mstr rangeOfString:search];
if (substr.location != NSNotFound) {
[mstr replaceCharactersInRange:substr withString: replace];
NSLog(@" %@", mstr);
}
//查找和替换所有的情况
search = @"a";
replace = @"X";
substr = [mstr rangeOfString: search];
while (substr.location != NSNotFound) {
[mstr replaceCharactersInRange:substr withString: replace];
substr = [mstr rangeOfString: search];
}
NSLog(@" %@", mstr);
[pool drain];
return 0;
}数组对象:是Foundation数组是有序的对象集合。
数组有两种:
NSArray不可变数组类和NSMutableArray可变数组类。
注意,需要标记参数数组的结束,将这个数组的最后一个值定为nil,它实际上并不会存储在数组中。
数组中的元素是由它们的索引数确定的。与NSString对象类似,索引从0开始。
可以通过NSLog格式化字符串%@显示整个数组。
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSArray *weeksNames = [NSArray arrayWithObjects:
@"星期一",@"星期二",@"星期三",@"星期四"
,@"星期五",@"星期六",@"星期日",nil];
NSLog(@"星期名字");
NSLog(@"==== ====");
int i;
for (i=0; i < [weeksNames count];i++) {
NSLog(@"%2i %@ ", i+1, [weeksNames objectAtIndex: i]);
}
[pool drain];
return 0;
}#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSMutableArray *weeksNames = [[NSMutableArray alloc] initWithCapacity: 3];
[weeksNames addObject: @"星期一"];
[weeksNames addObject: @"星期二"];
[weeksNames addObject: @"星期三"];
[weeksNames addObject: @"星期四"];
[weeksNames addObject: @"星期五"];
[weeksNames addObject: @"星期六"];
[weeksNames addObject: @"星期日"];
NSLog(@"星期名字");
NSLog(@"==== ====");
int i;
for (i=0; i < [weeksNames count];i++)
NSLog(@"%2i %@ ", i+1, [weeksNames objectAtIndex: i]);
[weeksNames release];
return 0;
}NSValue:
数组这样的Foundation集合只能存储对象,不能存储像int这样的基本数据类型。
NSValue类正好可以将结构转化为对象,并且把它存储在集合中。
这种将结构化转为对象的方式,简称为包装(wrapping),
逆向的处理是从对象中解出基本类型,简称展开(unwrapping)。
词典可以使固定的,也可以是可变的。
可变词典中的记录可以动态添加和删除。
和数组对象不一样,词典对象是无序的。

#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSArray * keys = [@"one two three four five" componentsSeparatedByString:@" "];
NSArray * values = [@"alpha bravo charlie delta echo" componentsSeparatedByString:@" "];
NSDictionary * dict = [[NSDictionary alloc] initWithObjects:values forKeys:keys];
NSLog(@"%@", [dict description]);
[dict release];
[pool drain];
return 0;
}#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSMutableDictionary *mutable = [[NSMutableDictionary alloc] init];
// add objects
[mutable setObject: @"Tom" forKey: @"tom@jones.com"];
[mutable setObject: @"Bob" forKey: @"bob@dole.com" ];
NSLog(@"%@", [mutable description]);
[mutable release];
[pool drain];
return 0;
}集合对象:
set是一组单值对象集合,它可以是变的或不可以变的。
操作包括:搜索、添加、删除集合中的成员(仅用于可变集合),比较两个集合,计算两个集合的交集和并集等。
这些集合对象包括:NSSet、NSMutableSet、NSIndexSet和NSCountedSet等。
注意,NSIndexSet没有可变版本。
Objective-C之成魔之路【15-Foundation框架】
标签:ios开发 objective-c 面向对象 cocoa touch 框架
原文地址:http://blog.csdn.net/haomengzhu/article/details/41145069