NSNubmerapp
NSNumber是一个类,该类中存在多种处理数值的方法,可直接建立该类的实例变量this
1 // 定义3个NSNumber类型的变量 2 NSNumber *myNumber, *floatNumber, *intNumber 3 4 // 顶一个一个NSInteger的变量,NSInteger不是对象,而是使用typedef定义的一种数据类型 5 NSInteger myInt 6 7 // 实例化一个NSNumber类,并为其设定一个100的整形数值,将这个类实例赋给intNumber 8 intNumber = [NSNumber numberWithInteger:100]; 9 10 // 调用NSNumber类中的integerValue方法获取整数值赋值给NSInteger类型变量myInt 11 myInt = [intNumber integerValue];
在上述例子中,integerValue只能获取integer类型的变量。spa
也能够经过手动分配内存的方式建立NSNumber类实例,如:指针
1 // 建立一个包含整数类型,值为50的NSNumber实例变量 2 NSNumber *myNumber = [[NSNumber alloc] initWithInt: 50];
注意,经过手动分配内存方式建立NSNumber实例变量的实例不能修改其值,不然会报错。code
NSString对象
在Object-c中建立一个字符串变量很是简单,如:@"program "blog
可是注意,这里的字符串变量是常量,即一旦定义后,就不能够改变其值。它其实是NSConstantString类的实例,该类是NSString的子类。ip
在NSLog中,能够经过%@来输出一个字符串常量内存
1 NSString *myStr = @"this is a string"; 2 NSLog(@"%@", myStr);
%@不单单能够显示字符串,还能够用它来打印一个对象。字符串
当用%@来打印一个对象时,该对象会自动调用description方法,默认会打印出该对象的类名,以及该对象在内存中的地址,能够经过重写description方法来更改这一默认行为。
1 NSString *str1 = @"string1"; 2 NSString *str2 = @"string2"; 3 NSString *ref; 4 5 ref = [NSString stringWithString: str1]; 6 str1 = [str1 uppercaseString]; 7 str2 = [stringByAppendingString: str1];
8 ref = [str2 uppercaseString];
上述代码首先建立了3个NSString类型的常量变量
当更改其中任意一个常量值的时候,实际上是更新了该类型所自定的内存地址,即指向了新的地址从而达到更新值的效果。
[NSString stringWithString: str1];
该语句会真是的去建立一个新的对象,该对象中值的地址会指向str1的内存地址
ref = str1;
只是简单的建立了一个指向str1对象的内存地址指针
注,上述所说的常量是指存储在内存中的值是常量,即存储在内存中的string1和string2是不可变动,而str一、str2和ref所指向的内存地址是可变的。在上述各个变动值的过程实际上是建立了一个新的NSString对象并对其进行初始化操做。
第五行中系统建立一个新的对象并初始化其值为str1所指向的值赋给ref
第八行一样也是建立一个新的对象,但此时第五行建立的内存已经没法被引用了,不过没必要担忧,系统会自动对其销毁。
在NSString类中,一些方法在调用或返回时须要提供一个范围参数,Object-C提供了一种特殊类型:NSRange,这种类型其实是定义的一个结构,该结构含有两个元素:location和length。这两个元素都是NSUinteger类型的变量。
1 subRange = [str1 rangeOfString: @"string A"]; 2 NSLog (@"String is at index %lu, length is %lu", subRange.location, subRange.length);
可经过NSMutableString类建立一个字符可变的对象,该类属于NSString的子类,因此该类的实例能够调用NSString类中定义的全部方法。
这里所说的可变指的是真正更改内存中存储的值
1 #import <Foundation/Foundation.h> 2 int main (int argc, char * argv[]) { 3 @autoreleasepool { 4 NSString *str1 = @"This is string A"; 5 NSString *search, *replace; 6 NSMutableString *mstr; 7 NSRange substr; 8 // Create mutable string from nonmutable 9 mstr = [NSMutableString stringWithString: str1]; 10 NSLog (@"%@", mstr); 11 // Insert characters 12 [mstr insertString: @" mutable" atIndex: 7]; 13 NSLog (@"%@", mstr); 14 // Effective concatentation if insert at end 15 [mstr insertString: @" and string B" atIndex: [mstr length]]; 16 NSLog (@"%@", mstr); 17 // Or can use appendString directly 18 [mstr appendString: @" and string C"]; 19 NSLog (@"%@", mstr); 20 // Delete substring based on range 21 [mstr deleteCharactersInRange: NSMakeRange (16, 13)]; 22 NSLog (@"%@", mstr); 23 // Find range first and then use it for deletion 24 substr = [mstr rangeOfString: @"string B and “]; 25 if (substr.location != NSNotFound) { 26 [mstr deleteCharactersInRange: substr]; 27 NSLog (@"%@", mstr); 28 } 29 // Set the mutable string directly 30 [mstr setString: @"This is string A"]; 31 NSLog (@"%@", mstr); 32 // Now let’s replace a range of chars with another 33 [mstr replaceCharactersInRange: NSMakeRange(8, 8) withString: @"a mutable string"]; 34 NSLog (@"%@", mstr); // Search and replace 35 search = @"This is"; replace = @"An example of"; 36 substr = [mstr rangeOfString: search]; 37 if (substr.location != NSNotFound) { 38 [mstr replaceCharactersInRange: substr withString: replace]; 39 NSLog (@"%@", mstr); 40 } 41 // Search and replace all occurrences 42 search = @"a"; replace = @"X"; 43 substr = [mstr rangeOfString: search]; 44 while (substr.location != NSNotFound) 45 { 46 [mstr replaceCharactersInRange: substrwithString: replace]; 47 substr = [mstr rangeOfString: search]; 48 } 49 NSLog (@"%@", mstr); 50 } 51 return 0; 52 }
行6建立了一个NSMutableString类型实例变量mstr
行9将mstr指向的内存中的值设置为str1所指向的内存地址中所存储的值。当stringWithString方法返回给一个NSMutableString类型变量时会返回一个值可变的对象,而该方法返回给一个NSString类型变量时,返回的是一个值不可变的对象。
行12在mstr字符串中的指定位置插入给定的字符串,该方法没有返回值,由于它直接对mstr对象进行操做。
NSArray