探索Objective-C编程:选择器、类别与应用开发
立即解锁
发布时间: 2025-08-24 01:10:19 阅读量: 1 订阅数: 2 

# 探索Objective - C编程:选择器、类别与应用开发
## 1. 选择器(Selectors)
在Objective - C里,选择器是用来选择对象要执行的方法的名称,它能识别方法。下面是一个创建按钮视图并处理其事件的示例:
```objc
//---create a Button view---
CGRect frame = CGRectMake(10, 50, 300, 50);
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = frame;
[button setTitle:@"Click Me, Please!" forState:UIControlStateNormal];
button.backgroundColor = [UIColor clearColor];
[button addTarget:self action:@selector(buttonClicked:)
forControlEvents:UIControlEventTouchUpInside];
```
在上述代码中,为了处理按钮触发的事件(如Touch Up Inside事件),需要调用`UIButton`类的`addTarget:action:forControlEvents:`方法。`action:`参数接收一个`SEL`(选择器)类型的参数,这里传入了在类中定义的`buttonClicked:`方法。其定义如下:
```objc
-(IBAction) buttonClicked: (id) sender {
//...
}
```
另外,也可以创建一个`SEL`类型的对象,然后使用`NSSelectorFromString`函数来实例化它,该函数接收一个包含方法名称的字符串:
```objc
NSString *nameOfMethod = @"buttonClicked:";
SEL methodName = NSSelectorFromString(nameOfMethod);
[button addTarget:self action:methodName
forControlEvents:UIControlEventTouchUpInside];
```
**注意**:命名选择器时,要指定方法的全名。若方法有一个或多个参数,需在选择器中添加“:”,例如:
```objc
NSString *nameOfMethod = @"someMethod:withPara1:andPara2:";
```
## 2. 类别(Categories)
Objective - C中的类别允许在不子类化现有类的情况下为其添加方法,也可用于重写现有类的实现。在某些语言(如C#)中,类别被称为扩展方法。
### 2.1 示例:为`NSString`类添加`isEmail`方法
若要测试字符串是否包含有效的电子邮件地址,可以为`NSString`类添加`isEmail`方法,这样就能在任何`NSString`实例上调用该方法:
```objc
NSString *email = @"[email protected]";
if ([email isEmail]) {
//...
}
```
### 2.2 实现步骤
#### 2.2.1 定义类别头文件(`utils.h`)
```objc
#import <Foundation/Foundation.h>
//---NSString is the class you are extending---
@interface NSString (stringUtils)
//---the method you are adding to the NSString class---
- (BOOL) isEmail;
@end
```
#### 2.2.2 实现类别方法(`utils.m`)
```objc
#import "Utils.h"
@implementation NSString (Utilities)
- (BOOL) isEmail {
NSString *emailRegEx =
@"(?:[a-z0-9!#$%\\&‘*+/=?\\^_`{|}~-]+(?:\\.[a-z0-9!#$%\\&‘*+/=?\\^_`{|}“
@"~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\“
@"x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-“
@"z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5”
@"|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-“
@"9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21"
@"-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])";
NSPredicate *regExPredicate = [NSPredicate
predicateWithFormat:@"SELF MATCHES %@",
emailRegEx];
return [regExPredicate evaluateWithObject:self];
}
@end
```
### 2.3 测试电子邮件地址的有效性
```objc
NSString *email = @"[email protected]";
if ([email isEmail])
NSLog(@"Valid email");
else
NSLog(@"Invalid email");
```
## 3. 应用开发中的其他要点
### 3.1 动画
动画在应用开发中很重要,常见的动画类型有:
- **块动画**:使用块语法实现动画效果。
- **弹跳球动画**:实现球的弹跳效果,涉及到动画曲线、持续时间等参数的设置。
- **图像系列动画**:通过一系列图像实现动画。
### 3.2 数据库操作
数据库操作包括数据库的捆绑、打开、记录的插入和检索等。例如,使用SQLite3进行数据库操作:
```objc
// 打开数据库
- (void)openDB {
NSString *dbPath = [[self documentsPath] stringByAppendingPathComponent:@"myDatabase.db"];
if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {
NSLog(@"Database opened successfully");
} else {
NSLog(@"Error opening database")
```
0
0
复制全文
相关推荐









