博客笔记总结1
发布日期:2021-06-29 04:42:47 浏览次数:3 分类:技术文章

本文共 10166 字,大约阅读时间需要 33 分钟。

1.根据汉字字符串获取该字符串的拼音然后取得首字母(这个我之前写过博文)
[objc]   
 
  1. <span style="font-size:18px;">分享资源    汉字转换为 拼音 获取首字母  
  2. //获取拼音首字母(传入汉字字符串, 返回大写拼音首字母)  
  3. /* 
  4. - (NSString *)firstCharactor:(NSString *)aString 
  5. {
     
  6.     //转成了可变字符串 
  7.     NSMutableString *str = [NSMutableString stringWithString:aString]; 
  8.     //先转换为带声调的拼音 
  9.     CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO); 
  10.     //再转换为不带声调的拼音 
  11.     CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO); 
  12.     //转化为大写拼音 
  13.     NSString *pinYin = [str capitalizedString]; 
  14.     //获取并返回首字母 
  15.     return [pinYin substringToIndex:1]; 
  16. } 
  17. */  
  18.         NSString *string = @"简书" ;  
  19.         if ([string length])  
  20.         {  
  21.             NSMutableString *mutableString = [NSMutableString stringWithString:string] ;  
  22.             /** 
  23.              *  由于此方法是在coreFoundation框架下,咱们平时所使用的类型都是Foundation框架下的,所以需要转换类型. 
  24.              * 
  25.              *  @param string#>    string 所需要转换的原字符#> 
  26.              *  @param range#>     range 所需要转换字符的范围.如果为0或者是NULL意思是所有字符都转换#> 
  27.              *  @param transform#> transform 转换方式#> 
  28.              *  @param reverse#>   reverse 如果为YES,返回原字符串;如果为NO,返回转换之后的字符串#> 
  29.              * 
  30.              *  @return return value description 
  31.              */  
  32.             // 将所有非英文的字符转换为拉丁字母,并且带声调和重音标识  
  33.             // __bridge :只改变当前对象的类型,但是不改变对象内存的管理权限  
  34.             CFStringTransform((__bridge CFMutableStringRef)mutableString , 0,kCFStringTransformToLatin , NO) ;  
  35.   
  36.             // 去掉声调  
  37.             CFStringTransform((__bridge CFMutableStringRef)mutableString , 0,kCFStringTransformStripDiacritics , NO) ;  
  38.   
  39.             // 每个单词的首字母大写 后再截取字符串  
  40.             NSString *str = [[mutableString capitalizedString] substringToIndex:1];  
  41.         }</span>  
2.根据UILabel里的内容自适应高度(xib中由我自己添加)
[objc]   
 
  1. NSString *contentString = [dic objectForKey:@"content"] ; //从字典中提取字符串  
  2. CGRect rect = [contentString boundingRectWithSize:CGSizeMake(tableView.bounds.size.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName :[UIFont systemFontOfSize:15]} context:nil] ;  
  3.     // 内容的自适应高度方法  
  4.      *  @param CGSize 规定文本显示的最大范围  
  5.         @param options 按照何种设置来计算范围  
  6.         @param attributes 文本内容的一些属性,例如字体大小,字体类型等  (字体不一样,高度也不一样)  
  7.         @parma context 上下文 可以规定一些其他的设置 但是一般都是nil  
  8.      */      
  9.     // 枚举值中的 " | "  意思是要满足所有的枚举值设置.  
xib中的代码,请活学活用~
[objc]   
 
  1. self.tableView.rowHeight = UITableViewAutomaticDimension;  
  2.     self.tableView.estimatedRowHeight = 150;  
3. 把图片做成圆形图标(非常常用)
[objc]   
 
  1. self.headIconImageView = [[UIImageView alloc] initWithFrame:CGRectMake(10104040)] ;  
  2. self.headIconImageView.layer.cornerRadius = 20 ; // 设置半径   
  3. self.headIconImageView.layer.masksToBounds = YES ; // 边界是否允许截取  
4. NSTimer计时器
使用实例代码如下:
[objc]   
 
  1. // 第一个参数:多长时间会触发一次,以秒为单位  
  2. // 第二个参数:如果看到函数的参数有target,一般情况下,都用self  
  3. // 第三个参数:SEL,需要调用其他的方法,就是每次时钟被触发的时候,去执行的方法  
  4. // 最多可以带一个参数,就是时钟本身  
  5. // 第四个参数,暂时不用考虑,设置成nil  
  6. // 第五个参数:是否重复,通常会设置YES  
  7.   
  8. _gameTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES];  
a.在时钟触发方法中,可以使用sender.fireDate获取到时钟被触发的时间
b.注意:使用NSTimer的时候,千万不要忘记调用invalidate方法关闭时钟。
c.NSTimer可能不会是及时相应触发时间的,它的执行优先级相对较低,因此,不要使用NSTimer去做实时响应需求较高的周期性操作。
5. NSNumber

a.是数字的NS对象的表达形式,如果要把数字添加到数组或者字典中,必须要进行转换,同时要使用数组中的数字,还需要转换成对应的数字。

b.要转换数字可以使用OC提供的包装方法:@(int)
c.要把NSNumber转换成字符串,需要使用stringValue方法

6.取消图片的渲染
[objc]   
 
  1. [button setImage:[[UIImage imageNamed:@"1.jpg" ] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]  forState:UIControlStateNormal] ;  
7.单例+方法锁
[objc]   
 
  1. static Singleton *singleton = nil ;  
  2.   
  3. + (Singleton *)defaultSingleton  
  4. {  
  5.     // 方法锁,作用为:当多个线程同时调用方法的时候,保证只有一个线程在使用该方法.例如:A和B同时调用defaultSingleton方法,如果A正在使用该方法,那么B就不能调用,直到A使用完成,B才会执行该方法.这个也保证单例对象的唯一性,避免初始化方法被同时多次执行.  
  6.     @synchronized(self)  
  7.     {  
  8.         if (singleton == nil)  
  9.         {  
  10.             singleton = [[Singleton alloc] init] ;  
  11.         }  
  12. }  
  13.         return singleton ;  
  14. }  
8.隐藏状态栏 修改状态栏风格
[objc]   
 
  1. -(UIStatusBarStyle)preferredStatusBarStyle   
  2. {   
  3.     return UIStatusBarStyleLightContent;  // 暗背景色时使用  
  4. }   
  5.   
  6. - (BOOL)prefersStatusBarHidden   
  7. {   
  8.     return YES// 是否隐藏状态栏  
  9. }  
9.UITableViewCell可移动,需要打开的代理方法以及移动过程中调用的代理方法
[objc]   
 
  1. // tableView可移动  移动完成之后会调用此代理方法  
  2. - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath  
  3. {  
  4.   
  5. }  
  6.   
  7. // 移动过程中调用的代理方法 -- 示例为不能跨区移动  
  8. /** 
  9.  *  <#Description#> 
  10.  * 
  11.  *  @param tableView 
  12.  *  @param sourceIndexPath              所要移动单元格的原始位置 
  13.  *  @param proposedDestinationIndexPath 将要移动到的位置 
  14.  * 
  15.  *  @return return value description 
  16.  */  
  17. - (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath  
  18. {  
  19.     // 移动位置在同一分区  
  20.     if (sourceIndexPath.section == proposedDestinationIndexPath.section)  
  21.     {  
  22.         // 这时允许单元格移动  
  23.         return proposedDestinationIndexPath ;  
  24.     }  
  25.     // 不在同一分区 不让单元格移动,返回原始的indexPath  
  26.     else  
  27.     {  
  28.         return sourceIndexPath ;  
  29.     }  
  30. }  
10.UIImage与字符串互转
[objc]   
 
  1. //图片转字符串    
  2. -(NSString *)UIImageToBase64Str:(UIImage *) image    
  3. {    
  4.     NSData *data = UIImageJPEGRepresentation(image, 1.0f);    
  5.     NSString *encodedImageStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];    
  6.     return encodedImageStr;    
  7. }  
  8.   
  9. //字符串转图片    
  10. -(UIImage *)Base64StrToUIImage:(NSString *)_encodedImageStr    
  11. {    
  12.     NSData *_decodedImageData   = [[NSData alloc] initWithBase64Encoding:_encodedImageStr];    
  13.     UIImage *_decodedImage      = [UIImage imageWithData:_decodedImageData];    
  14.     return _decodedImage;    
  15. }  
11.当有多个导航控制器时,一次设置多个导航控制器
[objc]   
 
  1. UINavigationBar *navBar = [UINavigationBar appearance] ;  
  2.     // 所有导航条颜色都会改变 -- 一键设置  
  3.     //navBar.barTintColor = [UIColor yellowColor] ;  
  4.     [navBar setBackgroundImage:[UIImage imageNamed:@"bg_nav.png"] forBarMetrics:UIBarMetricsDefault] ;  
12.通过2D仿射函数实现小的动画效果(变大缩小) --可用于自定义pageControl中.
[objc]   
 
  1. [UIView animateWithDuration:0.3 animations:^{  
  2. imageView.transform = CGAffineTransformMakeScale(22);  
  3. } completion:^(BOOL finished) {  
  4. imageView.transform = CGAffineTransformMakeScale(1.01.0);  
  5. }];  
13.处理标签字符串中的空格,换行,/t(制表符)等
[objc]   
 
  1. - (NSString *)replaceStringWithString :(NSMutableString *)string  
  2. {  
  3.     NSString *string1 = [string stringByReplacingOccurrencesOfString:@"\n" withString:@""] ;  
  4.     NSString *string2 = [string1 stringByReplacingOccurrencesOfString:@" " withString:@""] ;  
  5.     NSString *string3 = [string2 stringByReplacingOccurrencesOfString:@"\r" withString:@""] ;  
  6.     NSString *string4 = [string3 stringByReplacingOccurrencesOfString:@"\t" withString:@""] ;  
  7.     return string4 ;  
  8. }  
14.UITextField的字数限制
[objc]   
 
  1. // viewDidLoad中  
  2. [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFiledEditChanged:)   
  3.           name:@"UITextFieldTextDidChangeNotification" object:myTextField];  
[objc]   
 
  1. -(void)textFiledEditChanged:(NSNotification *)obj  
  2. {  
  3.     UITextField *textField = (UITextField *)obj.object;  
  4.     NSString *toBeString = textField.text;  
  5.   
  6.     //获取高亮部分  
  7.     UITextRange *selectedRange = [textField markedTextRange];  
  8.     UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];  
  9.   
  10.     // 没有高亮选择的字,则对已输入的文字进行字数统计和限制  
  11.     if (!position)  
  12.     {  
  13.         if (toBeString.length > MAX_STARWORDS_LENGTH)  
  14.         {  
  15.             NSRange rangeIndex = [toBeString rangeOfComposedCharacterSequenceAtIndex:MAX_STARWORDS_LENGTH];  
  16.             if (rangeIndex.length == 1)  
  17.             {  
  18.                 textField.text = [toBeString substringToIndex:MAX_STARWORDS_LENGTH];  
  19.             }  
  20.             else  
  21.             {  
  22.                 NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, MAX_STARWORDS_LENGTH)];  
  23.                 textField.text = [toBeString substringWithRange:rangeRange];  
  24.             }  
  25.         }  
  26.     }  
  27.  }  
15.在ARC工程中导入MRC的类和在MRC工程中导入ARC的类
[objc]   
 
  1. // 在ARC工程中导入MRC的类  我们选中工程->选中targets中的工程,然后选中Build Phases->在导入的类后边加入标记 -  fno-objc-arc  
  2. // 在MRC工程中导入ARC的类 路径与上面一致,在该类后面加上标记 -fobjc-arc  
16.导入Xcode空模板

只需要把你下载好的空模板拷贝到该路径下即可.

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Application

17.iOS9中新增App Transport Security(简称ATS)特性
主要使用到原来请求的时候用到的HTTP,都转向TLS1.2协议进行传输。这也意味着所有的HTTP协议都强制使用了HTTPS协议进行传输。
18.substringWithRange: 专门截取字符串的一块肉

NSMakeRange(4,2) 从第4个字符开始截取,长度为2个字符,(字符串都是从第0个字符开始数的哦~!)

[objc]   
 
  1. self.begin_time = dic[@"begin_time"];  
  2.         self.end_time = dic[@"end_time"];  
  3.         NSRange range = NSMakeRange(511);  
  4.   
  5.         self.time = [[self.begin_time substringWithRange:range] stringByAppendingString:[@" -- "stringByAppendingString:[self.end_time substringWithRange:range]]];  
19.网络请求图片
[objc]   
 
  1. //    NSURL *url = [NSURL URLWithString:urlString];  
  2. //    NSURLRequest *request = [NSURLRequest requestWithURL:url];  
  3. //    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];  
  4. //    UIImage *image = [UIImage imageWithData:data];  
  5.   
  6.     //此种写法和上面的操作是一致的,都是同步请求数据。  
  7.     UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]]];  
  8.     return image;  
20.按照文字计算高度
[objc]   
 
  1. - (void)descHeightWithDesc:(NSString *)desc{  
  2.   
  3.     CGRect rect = [desc boundingRectWithSize:CGSizeMake(240, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:self.descLabel.font} context:nil];  
  4.     //按照文字计算高度  
  5.     float textHeight = rect.size.height;  
  6.   
  7.     CGRect frame = self.descLabel.frame;  
  8.     frame.size.height = textHeight;  
  9.     self.descLabel.frame = frame;  
  10.   
  11. }  
21. 代理的安全保护【断是否有代理,和代理是否执行了代理方法】
[objc]   
 
  1. if (self.delegate && [self.delegate respondsToSelector:@selector(passValueWithArray:)]) {  
  2.   
  3. }  
22. 隐藏手机的状态栏
[objc]   
 
  1. -(BOOL)prefersStatusBarHidden {  
  2. return YES;  
  3. }  
23. 程序的退出【了解】

【特别注意】iOS的应用程序在应用程序内部是不允许被退出的,只能通过连击两次HOME键的时候进入程序管理界面 通过上滑退出。如果在应用程序中写了下面的代码,那么在提交程序的时候是不能被审核通过的。所以下面的代码是不允许写的。在这里只是作了解。

exit(0); // 只要执行这个语句,程序就会直接退出

24. 容器视图控制器

把一个视图控制器作为容器视图控制器,在这个容器视图控制器上添加多个其他视图控制器,并把其他控制器的视图添加上来

TableViewController *tableViewController = [[TableViewController alloc] init];
[self addChildViewController:tableViewController]; // self在这里就是容器视图控制器
[self.view addSubView:tableViewController.tableView];

使用场景:当我们某个视图控制器要使用多个子界面,并且多个子界面的处理事务的逻辑比较复杂,我们就可以通过这种方式将不同的逻辑处理拆分开,在各自的视图控制器中处理自己的逻辑,而不是所有逻辑都在当前视图控制器中处理。

25.问题处理:cell是有重用机制的,但有时候,我们的cell是自适应高度,但是所有cell的标识都是一个,那么,在重用的时候会出现 有的单元格高,有的单元格矮的情况,和本身想要的frame不匹配,这个时候,只需要给cell上面的视图在懒加载的时候,重新赋frame值就好了。也就是在if判断外,再赋值一次frame。(例如,豆瓣项目电影院列表)
26.问题处理:有时候self是加在parentViewController(父ViewController)上的,self上面是没有navigationController的,但是这时还想使用self父类的navigationController,那么,此时需要第二种方法push过去
[objc]   
 
  1. [self.navigationController pushViewController:detailViewController animated:YES];  
  2. [self.parentViewController.navigationController pushViewController:detailViewController animated:YES];  
27.视图是否自动(只是把第一个自动)向下挪64
[objc]   
 
  1. self.automaticallyAdjustsScrollViewInsets = NO// 不让系统帮咱们把scrollView及其子类的视图向下调整64  
28. 懒加载里面的判断条件(含义)
!_imageView 等同于 _imageView == nil

_imageView 等同于 _imageView != nil
29. 什么时候用宏,什么时候用变量(宏和变量都方便修改参数值)
如果在一个方法里面的时候,用变量

如果在多个方法里面,或者多个类中,用宏
30. xib的本质是xml文件
[objc]   
 
  1. xib编译之后生成的是nib文件  

转载地址:https://blog.csdn.net/zhanghaibo369/article/details/54910674 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:UITextField 限制输入字数
下一篇:博客笔记总结2

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月15日 05时01分20秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章