IOS开发的一些技巧和常见问题

 

1.什么时候该用ASIHTTPRequest,什么时候该用ASIFormDataRequest

如果是 Get ,或者参数可以简单的组成 Get 方式提交的时候, 比如  thread.php?id=123 , 就用  ASIHTTPRequest 就可以了原因是简单
如果必须是 POST ,或者参数很多,你要构造一个带参数的 URL 很麻烦的时候,就用  ASIHttpFormDataRequest

 

2.三个比较经典的git的库,关于状态栏的。

https://github.com/myell0w/MTStatusBarOverlay/

https://github.com/enormego/PhotoViewer

https://github.com/mwaterfall/MWPhotoBrowser

 

3.验证邮箱的合法性(转http://blog.csdn.net/pjk1129/article/details/6652636

 1 //通过区分字符串
 2 
 3 -(BOOL)validateEmail:(NSString*)email
 4 
 5 {
 6 
 7 if((0 != [email rangeOfString:@"@"].length) &&
 8 
 9 (0 != [email rangeOfString:@"."].length))
10 
11 {
12 
13 NSCharacterSet* tmpInvalidCharSet = [[NSCharacterSet alphanumericCharacterSet] invertedSet];
14 
15 NSMutableCharacterSet* tmpInvalidMutableCharSet = [[tmpInvalidCharSet mutableCopy] autorelease];
16 
17 [tmpInvalidMutableCharSet removeCharactersInString:@"_-"];
18 
19 
20 
21 NSRange range1 = [email rangeOfString:@"@"
22 
23 options:NSCaseInsensitiveSearch];
24 
25 
26 //取得用户名部分
27 
28 NSString* userNameString = [email substringToIndex:range1.location];
29 
30 NSArray* userNameArray = [userNameString componentsSeparatedByString:@"."];
31 
32 
33 for(NSString* string in userNameArray)
34 
35 {
36 
37 NSRange rangeOfInavlidChars = [string rangeOfCharacterFromSet: tmpInvalidMutableCharSet];
38 
39 if(rangeOfInavlidChars.length != 0 || [string isEqualToString:@""])
40 
41 return NO;
42 
43 }
44 
45 
46 //取得域名部分
47 
48 NSString *domainString = [email substringFromIndex:range1.location+1];
49 
50 NSArray *domainArray = [domainString componentsSeparatedByString:@"."];
51 
52 
53 for(NSString *string in domainArray)
54 
55 {
56 
57 NSRange rangeOfInavlidChars=[string rangeOfCharacterFromSet:tmpInvalidMutableCharSet];
58 
59 if(rangeOfInavlidChars.length !=0 || [string isEqualToString:@""])
60 
61 return NO;
62 
63 }
64 
65 
66 return YES;
67 
68 }
69 
70 else {
71 
72 return NO;
73 
74 }
75 
76 }
77 
78 
79 
80 
81 //利用正则表达式验证
82 
83 -(BOOL)isValidateEmail:(NSString *)email {
84 
85 NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; 
86 
87 NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex]; 
88 
89 return [emailTest evaluateWithObject:email];
90 
91 }

 

4.timer使用注意 在使用uiscrollView划动时停止
问题描述:
用一个NSTimer定时刷新,而在UISCrollView划动发生的过程中,刷新的效果停止.

解决办法:

 1 - (void)setTimer
 2 {
 3 
 4 NSTimer *timer;
 5 NSDate *date = [NSDate date];
 6 timer = [[NSTimer alloc] initWithFireDate:date interval:m_ablum.m_displayInterval target:self       selector:@selector(updateTime:) userInfo:nil repeats:YES];
 7 [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
 8 self.m_timer = timer;    
 9 [timer release];
10 }
11 
12 //在NSDefaultRunLoopMode模式下,没有更新

 需要注意的:

timer = [[NSTimer alloc] initWithFireDate:date interval:m_ablum.m_displayInterval target:self selector:@selector(updateTime:) userInfo:nil repeats:YES];

在设置为target时,其retaincount 加一.!!!!
一定注意

2.NSClassFromString 和 NSSelectorFromString

NSClassFromString

NSSelectorFromString

 

正常来说,

id myObj = [[NSClassFromString(@"MySpecialClass") alloc] init];

id myObj = [[MySpecialClass alloc] init];

是一样的。但是,如果你的程序中并不存在MySpecialClass这个类,下面的写法会出错,而上面的写法只是返回一个空对象而已。

因此,在某些情况下,可以使用NSClassFromString来进行你不确定的类的初始化。

比如在iPhone中,NSTask可能就会出现这种情况,所以在你需要使用NSTask时,最好使用:

[[NSClassFromString(@"NSTask") .....]]

而不要直接使用[NSTask ...]这种写法。

NSClassFromString的好处是:

1 弱化连接,因此并不会把没有的Framework也link到程序中。

2 不需要使用import,因为类是动态加载的,只要存在就可以加载。

 

 

for (int c=0; c<[classNames count]; c++) {

NSString*className=[classNames objectAtIndex:c];

id class=[[NSClassFromString(className) alloc] init];

for (int i=0; i<[params count]; i++) {

[class performSelector:NSSelectorFromString([NSStringstringWithFormat:@"setA%i",i])];

}

}

 

posted @ 2012-05-08 11:38  妙笔  阅读(354)  评论(0编辑  收藏  举报