基础API编程指南
立即解锁
发布时间: 2025-08-24 01:06:46 阅读量: 1 订阅数: 37 


Objective-C编程与应用开发实战
### 基础API编程指南
#### 1. 字符串操作与可变特性
在编程中,字符串操作是常见需求。以Objective - C为例,有`NSString`和`NSMutableString`两种类型。比如下面的代码:
```objective-c
NSMutableString *aMutableString = [NSMutableString stringWithString:@"abcdefghijk"];
[aMutableString replaceOccurrencesOfString:@"ABC"
withString:@"XYZ"
options: NSCaseInsensitiveSearch
range:NSMakeRange(0, aMutableString.length)];
// 此时字符串变为 "XYZefghijk"
```
这里展示了`NSMutableString`的使用,它可以直接修改字符串内容。而创建新的`NSString`实例虽然速度快(得益于不可变特性带来的性能提升),但会占用额外内存;修改`NSMutableString`速度慢,但无需额外内存。这体现了计算机科学中速度与空间的经典权衡。
#### 2. 数字封装类NSNumber
像Java、C#等现代编程语言一样,Objective - C为数字基本类型提供了封装类`NSNumber`。因为集合库通常只能包含对象实例,不能包含基本类型,所以需要这样的封装。
创建`NSNumber`实例的便捷方法如下:
- `numberWithBool:`
- `numerWithChar:`
- `numberWithDouble:`
- `numberWithFloat:`
- `numberWithInt:`
- `numberWithInteger:`
- `numberWithLong:`
- `numberWithLongLong:`
- `numberWithShort:`
以及上述方法的无符号版本。
需要注意的是,`numberWithInt:`期望一个32位的`int`基本类型,而`numberWithInteger:`期望一个`NSInteger`。在iOS和32位OS X应用中,`NSInteger`是`int`;在64位OS X应用中,它是64位的`long`。
下面是`NSNumber`的使用示例:
```objective-c
NSNumber *aNumber = [NSNumber numberWithInt:3];
NSLog(@"I have %@ apples", aNumber);
NSLog(@"I have %d apples", [aNumber intValue]);
```
这两条`NSLog`语句会产生相同的输出。
当调用`NSNumber`实例的`boolValue`方法时,除0以外的任何值都被解释为`YES`,向`nil`发送消息会返回`nil`,这里结果被解释为`NO`。所以只要期望默认值为0或`NO`,就可以安全地在`nil`的`NSNumber`实例上调用`boolValue`(或任何方法)。
#### 3. 数字对象字面量
Apple的LLVM编译器4.0版本(随Xcode 4.4提供,适用于OS X 10.8和iOS 6.0)引入了新的字面量,用于创建新的Objective - C对象。对于数字,只需在数字前加`@`符号即可创建对象,编译器会自动判断数字类型并生成相应的方法调用。例如:
| 字面量语法 | 等效代码 |
| --- | --- |
| `@'Z'` | `[NSNumber numberWithChar: 'Z']` |
| `@42` | `[NSNumber numberWithInt: 42]` |
| `@42U` | `[NSNumber numberWithUnsignedInt: 42U]` |
| `@42LL` | `[NSNumber numberWithLongLong: 42LL]` |
| `@3.14159254F` | `[NSNumber numberWithFloat: 3.14159254F]` |
| `@3.1415926535` | `[NSNumber numberWithDouble: 3.1415926535]` |
| `@YES` | `[NSNumber numberWithBool: YES]` |
如果想在编译时检查数字字面量支持的可用性,可以使用`__has_feature(objc_bool)`预处理器宏。
#### 4. 数据对象NSData
Foundation框架提供了`NSData`类来处理原始字节数据。它有两个重要的实例方法:`bytes`(指向数据对象封装的二进制数据的`void*`指针)和`length`(数据的长度)。通常不会直接与这些方法交互。
`NSData`可用于加载文件和URL的内容并后续解析,也可将二进制数据持久化到文件系统中的文件。示例代码如下:
```objective-c
NSData *data = [NSData dataWithContentsOfFile:@"/path/to/some/file"];
[data writeToFile:@"/path/to/some/other/file" atomically:YES];
```
`NSData`是不可变的,它有子类`NSMutableData`,可用于接收网络请求的分块数据。以下是使用`NSMutableData`的示例:
```objective-c
NSData *downloadMutableData;
NSURLConnection *activeURLConnection;
-(void)startDownload
{
downloadMutableData = [NSMutableData dataWithLength:0];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://path/to/some/block/of/text"]];
activeURLConnection = [NSURLConnection connectionWithRequest:request delegate:self];
[activeURLConnection start];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[downloadMutableData appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString *downloadedString = [[NSString alloc] initWithData:downloadMutableData encoding:NSUTF8StringEncoding];
```
0
0
复制全文
相关推荐










