小技巧总结

拉伸图片不失真数组

self.imageView.image=[[UIImage imageNamed:@""] stretchableImageWithLeftCapWidth:5 topCapHeight:30];并发

 

阻止锁屏,屏幕常亮
  常亮 [ [ UIApplication sharedApplication] setIdleTimerDisabled:YES ] ;app

 

获取main storyboard
 UIStoryboard *stoaryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
 LoginViewController *login = [stoaryboard instantiateViewControllerWithIdentifier:@"LoginViewController"];ide

 

图片数组播放
 _AnimationImage =[[UIImageView alloc]initWithFrame:CGRectMake(0,20, SCREEN_WIDTH, 100)];
    [self.view addSubview:_AnimationImage];
    _AnimationImage.animationImages = _ImageDatas;
    _AnimationImage.animationDuration=1;
 [_AnimationImage startAnimating];url

 

 

//0则不打印任何东西
#if 1component

#define NSLog(FORMAT, ...) fprintf(stderr,"[%s:%d行] %s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#elseorm

#define NSLog(FORMAT, ...) nil对象

#endif图片

 

循环遍历开发

for(... in ...)用起来很是方便、简洁,同时 enumerateObjectsUsingBlock: 也有不少新特性:
* 一般enumerateObjectsUsingBlock: 和 (for(... in ...)在效率上基本一致,有时会快些。主要是由于它们都是基于 NSFastEnumeration 实现的. 快速迭代在处理的过程当中须要多一次转换,固然也会消耗掉一些时间. 基于Block的迭代能够达到本机存储同样快的遍历集合. 对于字典一样适用,而数组的迭代却不行。
* 注意"enumerateObjectsUsingBlock" 修改局部变量时, 你须要声明局部变量为 __block 类型.
* enumerateObjectsWithOptions:usingBlock: 支持并发迭代或反向迭代,并发迭代时效率也很是高.
* 对于字典而言, enumerateObjectsWithOptions:usingBlock 也是惟一的方式能够并发实现恢复Key-Value值.

 

跳转到设置
 NSURL*url=[NSURL URLWithString:UIApplicationOpenSettingsURLString];
    
    [[UIApplication sharedApplication]openURL:url];

 

isKindOfClass来肯定一个对象是不是一个类的成员,或者是派生自该类的成员
isMemberOfClass只能肯定一个对象是不是当前类的成员

 

判断字符串包含某个字符

[numberString containsString:@"."];
[numberString rangeOfString:@"."].location != NSNotFound;

 

系统软件的分享

 NSArray *objectsToShare = @[@"http://www.baidu.com"];
    
    UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil];
    
    NSArray *excludedActivities = @[UIActivityTypePostToTwitter, UIActivityTypePostToFacebook,
                                    UIActivityTypePostToWeibo,
                                    UIActivityTypeMessage, UIActivityTypeMail,
                                    UIActivityTypePrint, UIActivityTypeCopyToPasteboard,
                                    UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll,
                                    UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr,
                                    UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo];
    controller.excludedActivityTypes = excludedActivities;
    
    // Present the controller
    [self presentViewController:controller animated:YES completion:nil];

 

截图,合成图片
//截图
UIGraphicsBeginImageContext(self.view.bounds.size); //currentView 当前的view
    
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    
    CGRect rect = CGRectMake(0, self.view.frame.size.height-228, self.view.frame.size.width,228);
    UIImage *resultImg = [UIImage imageWithCGImage:CGImageCreateWithImageInRect(viewImage.CGImage, rect)];
//拼合
 [image1 drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)];
    
    // Draw image2
    [image2 drawInRect:CGRectMake(0, 0, image2.size.width, image2.size.height)];
    
    UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();

 

惟一标识符
NSString *identifierForVendor = [[UIDevice currentDevice].identifierForVendor UUIDString];
NSString *identifierForAdvertising = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
identifierForVendor对供应商来讲是惟一的一个值,也就是说,由同一个公司发行的的app在相同的设备上运行的时候都会有这个相同的标识符。然而,若是用户删除了这个供应商的app而后再从新安装的话,这个标识符就会不一致。
advertisingIdentifier会返回给在这个设备上全部软件供应商相同的 一个值,因此只能在广告的时候使用。这个值会由于不少状况而有所变化,好比说用户初始化设备的时候便会改变。

 

利用 NSSetUncaughtExceptionHandler,当程序异常退出的时候,能够先进行处理,而后作一些自定义的动做,好比下面一段代码,就是网上有人写的,直接在发生异常时给某人发送邮件, 使用@try、catch捕获异常: 如下是最简单的代码写法,其中@finally能够去掉: @try {     // 可能会出现崩溃的代码 } @catch (NSException *exception) {     // 捕获到的异常exception } @finally {     // 结果处理 } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {     // Override point for customization after application launch.     NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);     return YES; }   void UncaughtExceptionHandler(NSException *exception) {     /**      *  获取异常崩溃信息      */     NSArray *callStack = [exception callStackSymbols];     NSString *reason = [exception reason];     NSString *name = [exception name];     NSString *content = [NSString stringWithFormat:@"========异常错误报告========\nname:%@\nreason:\n%@\ncallStackSymbols:\n%@",name,reason,[callStack componentsJoinedByString:@"\n"]];       /**      *  把异常崩溃信息发送至开发者邮件      */     NSMutableString *mailUrl = [NSMutableString string];     [mailUrl appendString:@"mailto:test@qq.com"];     [mailUrl appendString:@"?subject=程序异常崩溃,请配合发送异常报告,谢谢合做!"];     [mailUrl appendFormat:@"&body=%@", content];     // 打开地址     NSString *mailPath = [mailUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:mailPath]]; }