- #include /* 说明 malloc, NULL, size_t */
- #include /* 说明 va_ 相关类型和函数 */
- #include /* 说明 strcat 等 */
- char *vstrcat(const char *first, ...)
- {
- size_t len;
- char *retbuf;
- va_list argp;
- char *p;
- if(first == NULL)
- return NULL;
- len = strlen(first);
- va_start(argp, first);
- while((p = va_arg(argp, char *)) != NULL)
- len += strlen(p);
- va_end(argp);
- retbuf = malloc(len + 1); /* +1 包含终止符 \0 */
- if(retbuf == NULL)
- return NULL; /* 出错 */
- (void)strcpy(retbuf, first);
- va_start(argp, first); /* 重新开始扫描 */
- while((p = va_arg(argp, char *)) != NULL)
- (void)strcat(retbuf, p);
- va_end(argp);
- retbuf = malloc(len + 1); /* +1 包含终止符 \0 */
- if(retbuf == NULL)
- return NULL; /* 出错 */
- (void)strcpy(retbuf, first);
- va_start(argp, first); /* 重新开始扫描 */
- while((p = va_arg(argp, char *)) != NULL)
- (void)strcat(retbuf, p);
- va_end(argp);
- return retbuf;
- }
-
- %c 一个单一的字符
- %d 一个十进制整数
- %i 一个整数
- %e, %f, %g 一个浮点数
- %o 一个八进制数
- %s 一个字符串
- %x 一个十六进制数
- %p 一个指针
- %n 一个等于读取字符数量的整数
- %u 一个无符号整数
- %[] 一个字符集
- %% 一个精度符号
-
- //一、NSString
- /*----------------创建字符串的方法----------------*/
-
- 1、创建常量字符串。
- NSString *astring = @"This is a String!";
-
- 2、创建空字符串,给予赋值。
- NSString *astring = [[NSString alloc] init];
- astring = @"This is a String!";
- NSLog(@"astring:%@",astring);
- [astring release];
-
- 3、在以上方法中,提升速度:initWithString方法
- NSString *astring = [[NSString alloc] initWithString:@"This is a String!"];
- NSLog(@"astring:%@",astring);
- [astring release];
-
- 4、用标准c创建字符串:initWithCString方法
- char *Cstring = "This is a String!";
- NSString *astring = [[NSString alloc] initWithCString:Cstring];
- NSLog(@"astring:%@",astring);
- [astring release];
-
- 5、创建格式化字符串:占位符(由一个%加一个字符组成)
- int i = 1;
- int j = 2;
- NSString *astring = [[NSString alloc]
- initWithString:[NSString stringWithFormat:@"%d.This is %i string!",i,j]];
- NSLog(@"astring:%@",astring);
- [astring release];
-
- 6、创建临时字符串
- NSString *astring;
- astring = [NSString stringWithCString:"This is a temporary string"];
- NSLog(@"astring:%@",astring);
-
- /*----------------从文件读取字符串:initWithContentsOfFile方法 ----------------*/
- NSString *path = @"astring.text";
- NSString *astring = [[NSString alloc] initWithContentsOfFile:path];
- NSLog(@"astring:%@",astring);
- [astring release];
-
- /*----------------写字符串到文件:writeToFile方法 ----------------*/
- NSString *astring = [[NSString alloc] initWithString:@"This is a String!"];
- NSLog(@"astring:%@",astring);
- NSString *path = @"astring.text";
- [astring writeToFile: path atomically: YES];
- [astring release];
-
- /*---------------- 比较两个字符串----------------*/
- 用C比较:strcmp函数
- char string1[] = "string!";
- char string2[] = "string!";
- if(strcmp(string1, string2) = = 0)
- {
- NSLog(@"1");
- }
-
- isEqualToString方法
- NSString *astring01 = @"This is a String!";
- NSString *astring02 = @"This is a String!";
- BOOL result = [astring01 isEqualToString:astring02];
- NSLog(@"result:%d",result);
-
- compare方法(comparer返回的三种值)
- NSString *astring01 = @"This is a String!";
- NSString *astring02 = @"This is a String!";
- BOOL result = [astring01 compare:astring02] = = NSOrderedSame;
- NSLog(@"result:%d",result);
- NSOrderedSame 判断两者内容是否相同
-
- NSString *astring01 = @"This is a String!";
- NSString *astring02 = @"this is a String!";
- BOOL result = [astring01 compare:astring02] = = NSOrderedAscending;
- NSLog(@"result:%d",result);
- //NSOrderedAscending 判断两对象值的大小(按字母顺序进行比较,astring02大于astring01为真)
-
- NSString *astring01 = @"this is a String!";
- NSString *astring02 = @"This is a String!";
- BOOL result = [astring01 compare:astring02] = = NSOrderedDescending;
- NSLog(@"result:%d",result);
- //NSOrderedDescending 判断两对象值的大小(按字母顺序进行比较,astring02小于astring01为真)
-
- 不考虑大 小写比较字符串1
- NSString *astring01 = @"this is a String!";
- NSString *astring02 = @"This is a String!";
- BOOL result = [astring01 caseInsensitiveCompare:astring02] = = NSOrderedSame;
- NSLog(@"result:%d",result);
- //NSOrderedDescending判断两对象值的大小(按字母顺序进行比较,astring02小于astring01为 真)
-
- 不考虑大小写比较字符串2
- NSString *astring01 = @"this is a String!";
- NSString *astring02 = @"This is a String!";
- BOOL result = [astring01 compare:astring02
- options:NSCaseInsensitiveSearch | NSNumericSearch] = = NSOrderedSame;
- NSLog(@"result:%d",result);
-
- //NSCaseInsensitiveSearch:不区分大小写比较 NSLiteralSearch:进行完全比较,区分大小写 NSNumericSearch:比较字符串的字符个数,而不是字符值。
-
- /*----------------改变字符串的大小写----------------*/
- NSString *string1 = @"A String";
- NSString *string2 = @"String";
- NSLog(@"string1:%@",[string1 uppercaseString]);//大写
- NSLog(@"string2:%@",[string2 lowercaseString]);//小写
- NSLog(@"string2:%@",[string2 capitalizedString]);//首字母大小
-
- /*----------------在串中搜索子串 ----------------*/
- NSString *string1 = @"This is a string";
- NSString *string2 = @"string";
- NSRange range = [string1 rangeOfString:string2];
- int location = range.location;
- int leight = range.length;
- NSString *astring = [[NSString alloc]
- initWithString:[NSString stringWithFormat:@"Location:%i,Leight:%i"
- ,location,leight]];
- NSLog(@"astring:%@",astring);
- [astring release];
-
- /*----------------抽取子串 ----------------*/
- -substringToIndex: 从字符串的开头一直截取到指定的位置,但不包括该位置的字符
- NSString *string1 = @"This is a string";
- NSString *string2 = [string1 substringToIndex:3];
- NSLog(@"string2:%@",string2);
-
- -substringFromIndex: 以指定位置开始(包括指定位置的字符),并包括之后的全部字符
- NSString *string1 = @"This is a string";
- NSString *string2 = [string1 substringFromIndex:3];
- NSLog(@"string2:%@",string2);
-
- -substringWithRange: //按照所给出的位置,长度,任意地从字符串中截取子串
- NSString *string1 = @"This is a string";
- NSString *string2 = [string1 substringWithRange:NSMakeRange(0, 4)];
- NSLog(@"string2:%@",string2);
-
- const char *fieldValue = [value cStringUsingEncoding:NSUTF8StringEncoding];
- const char *fieldValue = [value UTF8String];
-
- NSString 转 NSData
- NSString* str= @"kilonet";
- NSData* data=[str dataUsingEncoding:NSUTF8StringEncoding];
-
- Date format用法:
- -(NSString *) getDay:(NSDate *) d
- {
- NSString *s ;
- NSDateFormatter *format = [[NSDateFormatter alloc] init];
- [format setDateFormat:@"YYYY/MM/dd hh:mm:ss"];
- s = [format stringFromDate:d];
- [format release];
- return s;
- }
-
- 各地时区获取:
-
- NSDate *nowDate = [NSDate new];
- NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
- [formatter setDateFormat:@"yyyy/MM/dd HH:mm:ss"];
- // 根据时区名字获取当前时间,如果该时区不存在,默认获取系统当前时区的时间
- // NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Europe/Andorra"];
- // [formatter setTimeZone:timeZone];
- //获取所有的时区名字
- NSArray *array = [NSTimeZone knownTimeZoneNames];
- // NSLog(@"array:%@",array);
- //for循环
- // for(int i=0;i<[array count];i++)
- // {
- // NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:[array objectAtIndex:i]];
- // [formatter setTimeZone:timeZone];
- // NSString *locationTime = [formatter stringFromDate:nowDate];
- // NSLog(@"时区名字:%@ : 时区当前时间: %@",[array objectAtIndex:i],locationTime);
- // //NSLog(@"timezone name is:%@",[array objectAtIndex:i]);
- // }
- //快速枚举法
- for(NSString *timeZoneName in array){
- [formatter setTimeZone:[NSTimeZone timeZoneWithName:timeZoneName]];
- NSLog(@"%@,%@",timeZoneName,[formatter stringFromDate:nowDate]);
- }
-
- [formatter release];
- [nowDate release];
-
- NSCalendar用法:
-
- -(NSString *) getWeek:(NSDate *) d {
- NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
- unsigned units = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit;
- NSDateComponents *components = [calendar components:units fromDate:d];
- [calendar release];
-
- switch ([components weekday]) {
- case 2:
- return @"Monday";
- break;
- case 3:
- return @"Tuesday";
- break;
- case 4:
- return @"Wednesday";
- break;
- case 5:
- return @"Thursday";
- break;
- case 6:
- return @"Friday";
- break;
- case 7:
- return @"Saturday";
- break;
- case 1:
- return @"Sunday";
- break;
- default:
- return @"No Week";
- break;
- }
-
- // 用components,我们可以读取其他更多的数据。
-
- }
-
- 4. 用Get方式读取网络数据:
-
- 将网络数读取为字符串
- - (NSString *) getDataByURL:(NSString *) url {
- return [[NSString alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]] encoding:NSUTF8StringEncoding];
- }
-
- //读取网络图片
- - (UIImage *) getImageByURL:(NSString *) url {
- return [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]]];
- }
-
- 多线程
- [NSThread detachNewThreadSelector:@selector(scheduleTask) toTarget:self withObject:nil];
-
- -(void) scheduleTask {
- //create a pool
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-
- //release the pool;
- [pool release];
- }
-
- //如果有参数,则这么使用:
- [NSThread detachNewThreadSelector:@selector(scheduleTask:) toTarget:self withObject:[NSDate date]];
-
- -(void) scheduleTask:(NSDate *) mdate {
- //create a pool
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-
- //release the pool;
- [pool release];
- }
-
- //注意selector里有冒号。
- //在线程里运行主线程里的方法
-
- [self performSelectorOnMainThread:@selector(moveToMain) withObject:nil waitUntilDone:FALSE];
-
- 6. 定时器NSTimer用法:
-
- 代码
- // 一个可以自动关闭的Alert窗口
-
- UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil
- message:[@"一个可以自动关闭的Alert窗口"
- delegate:nil
- cancelButtonTitle:nil //NSLocalizedString(@"OK", @"OK") //取消任何按钮
- otherButtonTitles:nil];
- //[alert setBounds:CGRectMake
- (alert.bounds.origin.x, alert.bounds.origin.y,
- alert.bounds.size.width, alert.bounds.size.height+30.0)];
- [alert show];
-
- UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
-
- // Adjust the indicator so it is up a few pixels from the bottom of the alert
- indicator.center = CGPointMake(alert.bounds.size.width/2, alert.bounds.size.height-40.0);
- [indicator startAnimating];
- [alert insertSubview:indicator atIndex:0];
- [indicator release];
-
- [NSTimer scheduledTimerWithTimeInterval:3.0f
- target:self
- selector:@selector(dismissAlert:)
- userInfo:[NSDictionary dictionaryWithObjectsAndKeys:alert,
- @"alert", @"testing ", @"key" ,nil] //如果不用传递参数,那么可以将此项设置为nil.
- repeats:NO];
-
- NSLog(@"release alert");
- [alert release];
-
- -(void) dismissAlert:(NSTimer *)timer{
-
- NSLog(@"release timer");
- NSLog([[timer userInfo] objectForKey:@"key"]);
-
- UIAlertView *alert = [[timer userInfo] objectForKey:@"alert"];
- [alert dismissWithClickedButtonIndex:0 animated:YES];
-
- }
-
- 定时器停止使用:
-
- [timer invalidate];
- timer = nil;
-
- 7. 用户缺省值NSUserDefaults读取:
-
- //得到用户缺省值
- NSUserDefaults *defs = [NSUserDefaults standardUserDefaults];
-
- //在缺省值中找到AppleLanguages, 返回值是一个数组
- NSArray* languages = [defs objectForKey:@"AppleLanguages"];
- NSLog(@"all language语言 is %@", languages);
-
- //在得到的数组中的第一个项就是用户的首选语言了
- NSLog(@"首选语言 is %@",[languages objectAtIndex:0]);
-
- //get the language & country code
- NSLocale *currentLocale = [NSLocale currentLocale];
-
- NSLog(@"Language Code is %@", [currentLocale objectForKey:NSLocaleLanguageCode]);
- NSLog(@"Country Code is %@", [currentLocale objectForKey:NSLocaleCountryCode
-
- 8. View之间切换的动态效果设置:
-
- SettingsController *settings = [[SettingsController alloc]initWithNibName:@"SettingsView" bundle:nil];
- settings.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; //水平翻转
- [self presentModalViewController:settings animated:YES];
- [settings release];
-
- 9.NSScrollView 滑动用法:
-
- -(void) scrollViewDidScroll:(UIScrollView *)scrollView{
- NSLog(@"正在滑动中...");
- }
-
- //用户直接滑动NSScrollView,可以看到滑动条
- -(void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
-
- }
-
- // 通过其他控件触发NSScrollView滑动,看不到滑动条
- - (void) scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
-
- }
-
- 11.键盘处理系列
-
- //set the UIKeyboard to switch to a different text field when you press return
-
- //switch textField to the name of your textfield
- [textField becomeFirstResponder];
-
- srandom(time(NULL)); //随机数种子
-
- id d = random(); // 随机数
-
- 4. iPhone的系统目录:
-
- //得到Document目录:
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *documentsDirectory = [paths objectAtIndex:0];
-
- //得到temp临时目录:
- NSString *tempPath = NSTemporaryDirectory();
-
- //得到目录上的文件地址:
- NSString *文件地址 = [目录地址 stringByAppendingPathComponent:@"文件名.扩展名"];
-
- 5. 状态栏显示Indicator:
-
- [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
-
- 6.app Icon显示数字:
-
- - (void)applicationDidEnterBackground:(UIApplication *)application{
- [[UIApplication sharedApplication] setApplicationIconBadgeNumber:5];
- }
-
- 7.sqlite保存地址:
-
- 代码
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *thePath = [paths objectAtIndex:0];
- NSString *filePath = [thePath stringByAppendingPathComponent:@"kilonet1.sqlite"];
-
- NSString *dbPath = [[[NSBundle mainBundle] resourcePath]
- stringByAppendingPathComponent:@"kilonet2.sqlite"];
-
- 8.Application退出:exit(0);
-
- 9. AlertView,ActionSheet的cancelButton点击事件:
-
- 代码
- -(void) actionSheet :(UIActionSheet *) actionSheet didDismissWithButtonIndex:(NSInteger) buttonIndex {
- NSLog(@"cancel actionSheet........");
- //当用户按下cancel按钮
- if( buttonIndex == [actionSheet cancelButtonIndex]) {
- exit(0);
- }
- // //当用户按下destructive按钮
- // if( buttonIndex == [actionSheet destructiveButtonIndex]) {
- // // DoSomething here.
- // }
- }
-
- - (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex {
- NSLog(@"cancel alertView........");
- if (buttonIndex == [alertView cancelButtonIndex]) {
- exit(0);
- }
- }
-
- 10.给Window设置全局的背景图片:
- window.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"coolblack.png"]];
-
- 11. UITextField文本框显示及对键盘的控制:
-
- 代码
- #pragma mark -
- #pragma mark UITextFieldDelegate
- //控制键盘跳转
- - (BOOL)textFieldShouldReturn:(UITextField *)textField {
-
- if (textField == _txtAccount) {
- if ([_txtAccount.text length]==0) {
- return NO;
- }
- [_txtPassword becomeFirstResponder];
- } else if (textField == _txtPassword) {
- [_txtPassword resignFirstResponder];
- }
-
- return YES;
- }
-
- //输入框背景更换
- -(BOOL) textFieldShouldBeginEditing:(UITextField *)textField{
-
- [textField setBackground:[UIImage imageNamed:@"ctext_field_02.png"]];
-
- return YES;
- }
-
- -(void) textFieldDidEndEditing:(UITextField *)textField{
- [textField setBackground:[UIImage imageNamed:@"ctext_field_01.png"]];
- }
-
- 12.UITextField文本框前面空白宽度设置以及后面组合按钮设置:
-
- 代码
- //给文本输入框后面加入空白
- _txtAccount.rightView = _btnDropDown;
- _txtAccount.rightViewMode = UITextFieldViewModeAlways;
-
- //给文本输入框前面加入空白
- CGRect frame = [_txtAccount frame];
- frame.size.width = 5;
- UIView *leftview = [[UIView alloc] initWithFrame:frame];
- _txtAccount.leftViewMode = UITextFieldViewModeAlways;
- _txtAccount.leftView = leftview;
-
- 13. UIScrollView 设置滑动不超出本身范围:
-
- [fcScrollView setBounces:NO];
-
- 14. 在drawRect里画文字:
-
- UIFont * f = [UIFont systemFontOfSize:20];
-
- [[UIColor darkGrayColor] set];
-
- NSString * text = @"hi \nKiloNet";
-
- [text drawAtPoint:CGPointMake(center.x,center.y) withFont:f];
-
- 15. NSArray查找是否存在对象时用indexOfObject,如果不存在则返回为NSNotFound.
-
- 16. NString与NSArray之间相互转换:
-
- array = [string componentsSeparatedByString:@","];
- string = [[array valueForKey:@"description"] componentsJoinedByString:@","];
-
- 17. TabController随意切换tab bar:
-
- [self.tabBarController setSelectedIndex:tabIndex];
-
- 或者 self.tabBarController.selectedIndex = tabIndex;
-
- 或者实现下面的delegate来扑捉tab bar的事件:
-
- 代码-(BOOL) tabBarController:(UITabBarController *)tabBarController
- shouldSelectViewController:(UIViewController *)viewController
- { if ([viewController.tabBarItem.title isEqualToString: NSLocalizedString(@"Logout",nil)])
- { [self showLogout]; return NO; } return YES;}
-
- 18. 自定义View之间切换动画:
- 代码
- - (void) pushController: (UIViewController*) controller
- withTransition: (UIViewAnimationTransition) transition
- {
- [UIView beginAnimations:nil context:NULL];
- [self pushViewController:controller animated:NO];
- [UIView setAnimationDuration:.5];
- [UIView setAnimationBeginsFromCurrentState:YES];
- [UIView setAnimationTransition:transition forView:self.view cache:YES];
- [UIView commitAnimations];
- }
-
- CATransition *transition = [CATransition animation];
- transition.duration = kAnimationDuration;
- transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
- transition.type = kCATransitionPush;
- transition.subtype = kCATransitionFromTop;
- transitioning = YES;
- transition.delegate = self;
- [self.navigationController.view.layer addAnimation:transition forKey:nil];
-
- self.navigationController.navigationBarHidden = NO;
- [self.navigationController pushViewController:tableViewController animated:YES];
-
- 20.计算字符串长度:
-
- CGFloat w = [title sizeWithFont:[UIFont fontWithName:@"Arial" size:18]].width;
-
- 23.在使用UISearchBar时,将背景色设定为clearColor,或者将translucent设为YES,都不能使背景透明,经过一番研究,发现了一种超级简单和实用的方法:
-
- 1
- [[searchbar.subviews objectAtIndex:0]removeFromSuperview];
-
- 背景完全消除了,只剩下搜索框本身了。
-
- 24. 图像与缓存 :
-
- UIImageView *wallpaper = [[UIImageView alloc] initWithImage:
-
- [UIImage imageNamed:@"icon.png"]]; // 会缓存图片
-
- UIImageView *wallpaper = [[UIImageView alloc] initWithImage:
-
- [UIImage imageWithContentsOfFile:@"icon.png"]]; // 不会缓存图片
-
- 25. iphone-常用的对视图图层(layer)的操作
-
- 对图层的操作:
-
- (1.给图层添加背景图片:
- myView.layer.contents = (id)[UIImage imageNamed:@"view_BG.png"].CGImage;
-
- (2.将图层的边框设置为圆脚
- myWebView.layer.cornerRadius = 8;
- myWebView.layer.masksToBounds = YES;
-
- (3.给图层添加一个有色边框
- myWebView.layer.borderWidth = 5;
- myWebView.layer.borderColor = [[UIColor colorWithRed:0.52 green:0.09 blue:0.07 alpha:1] CGColor];
iOS开发中常用函数及控件
最新推荐文章于 2017-06-16 17:29:02 发布