ios 各种技术

1.NSlog  发布后不打印

#ifdef DEBUG// 如果有DEBUG这个宏就编译下面一句代码

#define DDLog(...) NSLog(__VA_ARGS__)

#else // 如果没有DEBUG这个宏就编译下面一句代码

#define DDLog(...)

#endif

2.三方库及其他整理

用过的三方库:

1.?AFNetworking   HTTP 网络请求库  

2.?SDWebImage 图片缓存

3.?MBProgressHUD 加载中展示

4.MMDrawerController? 抽屉视图(自己也可以模仿再重写)?

5.?FMDB  sqlite

6.MJRefresh?   tableview 下拉刷新上拉加载

7.WebViewJavascriptBridge? 实现OC与JS交互

8.SBJSON?   json解析

9.MJExtension?    模型转换

10.SVPullToRefresh?  scrollview 上加下拉刷新

11.?Masonry/SnapKit     自适应布局 (类安卓的相对布局,由于本人1年安卓2年iOS 用起来挺顺手)

12.?AFPopupView  实现炫酷的跳转

13.?AwesomeMenu 实现炫酷工具栏效果

14.MJPhotoBrowser?   实现图片浏览效果,有个导致crash的bug,之后会更

15.  ZXingObjC   二维码 

16.MKNetworkKit? 轻量级HTTP 网络请求库

17.jpush   推送

18.alipay  支付宝支付

19.微信支付

20.友盟  分享、三方登陆、推送、数据记录、crash记录

21.iCarousel?  实现Coverflow效果。

22.SDCycleScrollView  无限轮播器

没有过的:

1.JSPatch js脚本更新线上代码(应急用)

2.CocoaPod?? 三方库的管理工具

3.更新Xcode后,三方插件不能用的解决方法

1.在终端中输入  defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID 会得到一串码即本版本xocde的UUID,复制留用。

2.前往文件夹~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/

这个插件目录是所谓的插件目录,找到相应的插件,右击显示报内容,打开里面的info.plist,找到DVTPlugInCompatibilityUUIDs 字段,将操作 1 中得到的UUID 添加到此处即可。重启xcode就可以使用了

4.获取带毫秒的NSDate

NSDateFormatter *dateFormatter = [[NSDateFormatteralloc] init];

[dateFormatter setDateStyle:NSDateFormatterMediumStyle];

[dateFormatter setTimeStyle:NSDateFormatterShortStyle];

//[dateFormatter setDateFormat:@"hh:mm:ss"]

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS"];

NSLog(@"-------0Date%@", [dateFormatter stringFromDate:[NSDate date]]);

5.WebViewJavascriptBridge的使用

转载2015-07-07 16:21:25

1.初始化一个webview(viewdidload)

@property (nonatomic, strong) WebViewJavascriptBridge *mainbridge;

UIWebView* webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:webView];
 2.将此webview与WebViewJavascriptBridge关联(viewdidload)

    [WebViewJavascriptBridgeenableLogging];
self.mainbridge = [WebViewJavascriptBridgebridgeForWebView:weakSelf webViewDelegate:(WVJB_WEBVIEW_DELEGATE_TYPE*)weakSelf.delegatehandler:^(id data, WVJBResponseCallback responseCallback) {
根据data 就可以判断了?
      }
 (3)oc给js传值(通过 response接受返回值 )  
[mainbridge send:@"A string sent from ObjC before Webview has loaded."responseCallback:^(id responseData) {
        NSLog(@"objc got response! %@", responseData);
    }];
?

6.swift 中AnyObject 转string 转 array

从json数组取得AnyObject  类型的anyData

var anyData: AnyObject! = resultDic.objectForKey("wxts1")

转string

var Datatext: String! = String(stringInterpolationSegment: anyData)

转array

1.        let DataArray: AnyObject! = anyData?

2.           var DataArray:NSArray = (anyData as! NSArray) asArray?

7.在swift中使用oc库

只要用到的是个.h  文件

1.先创建一个.h文件,可命名为Bridging-Header.?h

2.?在build setting 中找到Object-C Bridging Header 中添加Bridging-Header.?h 的相对路径

3.在?Bridging-Header.?h 中引入锁需的三方库或者oc类   如:#import"AFNetworking.h"

8.NSString 打印为(null),为空判断

NSString* remain_delivery_day = [resultDic objectForKey:@"remain_delivery_day"]

服务器返回为空的话??remain_delivery_day便会输出(null),

发现??remain_delivery_day isKindOfClass:[NSNull class]、[remain_delivery_day isEqualToString:@"(null)"] 都不可判断其为空,==nil也不行

解决方案最常用的是?remain_delivery_day length]==0

还有[remain_delivery_day isEqual:[NSNullnull]] ?

其实明白:?nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空。区别就是nil是一个对象,而NULL只是一个值   看这个问题就不是那么难了

9.放大一个imageview

#define CONST_animation_time 0.5

#define CONST_enlarge_proportion 15.0

CGPoint UpPointOfView(UIView *view)

{

return (CGPoint){view.center.x, 200+2+55/2};

};

- (void) circleAnimate:(UIImageView*)view

{

CGContextRef context = UIGraphicsGetCurrentContext();

[UIView beginAnimations:nil context:context];

[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

[UIView setAnimationDuration:CONST_animation_time];

[view setCenter:UpPointOfView(view)];

CABasicAnimation *scalingAnimation = (CABasicAnimation *)[view.layer animationForKey:@"scaling"];

if (!scalingAnimation)

{

scalingAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];

scalingAnimation.repeatCount=1;

scalingAnimation.duration=CONST_animation_time;

scalingAnimation.autoreverses=NO;

scalingAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];

scalingAnimation.fromValue=[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)];

scalingAnimation.toValue=[NSValue valueWithCATransform3D:CATransform3DMakeScale(CONST_enlarge_proportion,CONST_enlarge_proportion, 1.0)];

}

[view.layer addAnimation:scalingAnimation forKey:@"scaling"];

view.layer.transform = CATransform3DMakeScale(CONST_enlarge_proportion,CONST_enlarge_proportion, 1.0);

[UIView commitAnimations];

}

10.利用手势给图片添加点击事件

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(imageviewclick)];

[imageview addGestureRecognizer:singleTap];//点击图片事件,

imageview.userInteractionEnabled = YES;

11.iOS伪表单上传图片

- (void) imageUpload:(UIImage *) image{

//把图片转换成imageDate格式

NSData *imageData = UIImageJPEGRepresentation(image, 0.5);

//传送路径

NSString *urlString = @"http://www.呃呃呃呃呃.com/ImageUpload/uploadImg";

//建立请求对象

NSMutableURLRequest * request = [[NSMutableURLRequestalloc] init];

//设置请求路径

[request setURL:[NSURLURLWithString:urlString]];

//请求方式

[request setHTTPMethod:@"POST"];

//一连串上传头标签

NSString *boundary = (NSString*)@"---------------------------14737809831466499882746641449";

NSString *contentType = [NSStringstringWithFormat:@"multipart/form-data; boundary=%@",boundary];

[request addValue:contentType forHTTPHeaderField: @"Content-Type"];

NSMutableData *body = [NSMutableDatadata];

[body appendData:[[NSStringstringWithFormat:@"\r\n--%@\r\n",boundary]dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[@"Content-Disposition: form-data; name=\"upfile\"; filename=\"bb\"\r\n"dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n"dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData:[NSDatadataWithData:imageData]];

[body appendData:[[NSStringstringWithFormat:@"\r\n--%@--\r\n",boundary]dataUsingEncoding:NSUTF8StringEncoding]];

[request setHTTPBody:body];

//上传文件开始

//+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;

NSData *returnData = [NSURLConnectionsendSynchronousRequest:requestreturningResponse:nilerror:nil];

//获得返回值

NSString *returnString = [[NSStringalloc] initWithData:returnDataencoding:NSUTF8StringEncoding];

NSData *data = [returnString dataUsingEncoding:NSUTF8StringEncoding];

NSDictionary *resultDic = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingMutableLeaveserror:nil];

//    NSLog(@"%@",resultDic);

NSString * str11 = [NSStringstringWithFormat:@",%@",[resultDicobjectForKey:@"img_url"]];

[urlImageHeadappendString:str11];

}

12.iOS简单post

NSString *postString = [NSStringstringWithFormat:@"         {\\"userName\\":\\"%@\\",\\"userPass\\":\\"%@\\",\\"version\\":\\"1.0\\"}",self.userField.text,self.passwordField.text];

NSLog(@"%@",postString);

//一般转化称UTF-8,这里服务器需要ASCII

NSData* postData = [postStringdataUsingEncoding:NSASCIIStringEncodingallowLossyConversion:YES];

NSMutableURLRequest *request = [[[NSMutableURLRequestalloc] init] autorelease];

[requestsetURL:[NSURLURLWithString:@"http://lib.wap.zol.com.cn/test/login.php"]];

[requestsetCachePolicy:NSURLRequestUseProtocolCachePolicy];

[requestsetTimeoutInterval:100.0];

[request setHTTPMethod:@"POST"];

[request setHTTPBody:postData];

// 应该是application/x-www-form-urlencoded,但对方服务器写成了appliction/x-www-form-urlencoded,告诉服务器是一个表单提交数据方式

[requestsetValue:@"appliction/x-www-form-urlencoded"forHTTPHeaderField:@"Content-Type"];

//得到提交数据的长度

NSString* len = [NSString stringWithFormat:@"%d", [postData length]];

//添加一个http包头告诉服务器数据长度是多少

[requestsetValue:len forHTTPHeaderField:@"Content-Length"];

[NSURLConnectionconnectionWithRequest:request delegate:self];

13.iOS原生json解析

NSData *jsonData = [[NSData alloc] initWithContentsOfFile:JSON_PATH];

NSError *error = nil;

id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:&error;];

if (jsonObject != nil && error == nil){

NSLog(@"Successfully deserialized...");

if ([jsonObject isKindOfClass:[NSDictionary class]]){

NSDictionary *deserializedDictionary = (NSDictionary *)jsonObject;

NSLog(@"Dersialized JSON Dictionary = %@", deserializedDictionary);

} elseif ([jsonObject isKindOfClass:[NSArray class]]){

NSArray *deserializedArray = (NSArray *)jsonObject;

NSLog(@"Dersialized JSON Array = %@", deserializedArray);

} else {

NSLog(@"An error happened while deserializing the JSON data.");

}

}

14.模仿MBProgressHUD 成功

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 = [[UIActivityIndicatorViewalloc]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 dismissWithClickeonIndex:0 animated:YES];

}

//

[timer invalidate];

timer = nil;

15.UITableView   滑动到某一行

创建NSIndexPath

NSIndexPath*scrollIndexPath =[NSIndexPath indexPathForRow:10 inSection:0];

自己的tableview开始滚动?

?[[self tableView] scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];

16.常用小代码

[[[UIApplication sharedApplication] keyWindow] endEditing:YES];//关闭键盘

取消cell的选中状态cell.selectionStyle = UITableViewCellSelectionStyleNone;

状态栏          [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleDefault];

self.navigationController.navigationBarHidden = yes;?隐藏引导栏

17.关于Unbalanced calls to begin/end appearance transitions for

在自定义的tabbarvc里添加

- (void)viewWillAppear:(BOOL)animated

{

[self.selectedViewController beginAppearanceTransition: YES animated: animated];

}

-(void) viewDidAppear:(BOOL)animated

{

[self.selectedViewController endAppearanceTransition];

}

-(void) viewWillDisappear:(BOOL)animated

{

[self.selectedViewController beginAppearanceTransition: NO animated: animated];

}

-(void) viewDidDisappear:(BOOL)animated

{

[self.selectedViewController endAppearanceTransition];

}

18.CUICatalog: Invalid asset name supplied: (null)

[UIImage imageNamed:name];但是这个name却是空的,所以就报了这个错了。

解决方法,在项目中搜索[UIImage imageNamed:,然后打印看看所谓的name是否为空。找到后替换

时间: 2024-10-04 07:17:30

ios 各种技术的相关文章

干货!总结19个提升iOS开发技术的必看教程!

又到了ibnShawari一周一篇技术推送的时间了,今天我为大家带来了iOS开发篇,绝对实用,绝对简单!!! 注意!!本课程采用了一种系统且全面的方式学习:赶快来学习,体验这种方法的魔力吧!! 干货!总结19个提升iOS开发技术的必看教程!        本系列教程采用了最新的IOS开发技术进行讲解,视频中所有的例子都在最新的编译器中调试通过.理论上所有的例子都可以在成功运行.本路线图提供的视频课程是全网最深入,最全.通过对本路线图的学习,学员可以充分掌握IOS的开发过程,并具有一定的项目实战经

iOS 多线程技术2

iOS 多线程技术2 NSOperation NSInvocationOperation //创建一个队列 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; //创建子任务,定义子任务必须是 NSOperation 的子类 NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(dosome

OA01-一个Demo展示iOS多线程技术的基本应用场景

最近在看iOS关于GCD.NSOperation多线程编程技术编程指南的时候写了个 小Demo,以7个小场景基本涵盖多线程技术的主流用法:其实多线程技术早在大学 读书的时候,基本思路就已经清晰了,不同操作系统的多线程实现也大同小异,iOS 平台下原理也是一样,关键就在与,能否熟练的.很顺畅的根据应用场景来选用相应 的多线程技术.阅读苹果官方文档和一些别人写的博客的时候也依然有种隔靴捞痒的 感觉:书读百边,不如实践一遍啊,SO,尽管网上相关的博客一大堆(首推这篇: http://www.cocoa

iOS多线程技术—线程的状态

iOS多线程技术—线程的状态 一.简单介绍 线程的创建: self.thread=[[NSThread alloc]initWithTarget:self selector:@selector(test) object:nil]; 说明:创建线程有多种方式,这里不做过多的介绍. 线程的开启: [self.thread start]; 线程的运行和阻塞: (1)设置线程阻塞1,阻塞2秒 [NSThread sleepForTimeInterval:2.0]; (2)第二种设置线程阻塞2,以当前时间

iOS多线程技术—单例模式(ARC)与(MRC)

iOS多线程技术—单例模式(ARC) 一.简单说明: 设计模式:多年软件开发,总结出来的一套经验.方法和工具 java中有23种设计模式,在ios中最常用的是单例模式和代理模式. 二.单例模式说明 (1)单例模式的作用 :可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源. (2)单例模式的使用场合:在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次),应该让这个类创建出来的对象永远只有一个. (3)单例模式在ARC\MRC环

转: HTTP Live Streaming直播(iOS直播)技术分析与实现

http://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html HTTP Live Streaming直播(iOS直播)技术分析与实现 不经意间发现,大半年没写博客了,自觉汗颜.实则2012后半年,家中的事一样接着一样发生,实在是没有时间.快过年了,总算忙里偷闲,把最近的一些技术成果,总结成了文章,与大家分享. 前些日子,也是项目需要,花了一些时间研究了HTTP Live Streaming(HLS)技术,并实现了一个HLS编码器

iOS多线程技术—自定义NSOperation

iOS多线程技术—自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UITableViewController. // // YYViewController.h // 01-自定义Operation // // Created by apple on 14-6-26. // Copyright (c) 2014年 itcase. All rights reserved.

iOS多线程技术—GCD介绍

iOS多线程技术—GCD介绍 一.简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 3.提示 (1)GCD存在于libdispatch.dylib这个库中,

ios面试技术要点

iOS面试 技术总结点(可参考):多线程 运行时 runloop app框架 几种动画编程 jsonmodel原理 sdwebimage原理 masonry怎么应用及原理 应用框架有哪些 说一下Facebook的flux框架 混合app原理 怎么优化内存 怎么用instruments优化动画效果  KVC/KVO的理解及运用 本地存储的几种方式CoreData问的最多https://www.zhihu.com/question/19604641 这里面很多问题都问过了https://www.zh

iOS多线程技术—GCD的用法

iOS多线程技术—GCD的用法 一.主队列介绍 主队列:是和主线程相关联的队列,主队列是GCD自带的一种特殊的串行队列,放在主队列中得任务,都会放到主线程中执行. 提示:如果把任务放到主队列中进行处理,那么不论处理函数是异步的还是同步的都不会开启新的线程. 获取主队列的方式: 1 // 2 // YYViewController.m 3 // 12-GCD的基本使用(主队列) 4 // 5 // Created by 孔医己 on 14-6-25. 6 // Copyright (c) 2014