nsstring

iOS 头条一面 面试题

放肆的年华 提交于 2020-03-24 13:26:27
3 月,跳不动了?>>> 1、如何高效的切圆角? 切圆角共有以下三种方案: cornerRadius + masksToBounds:适用于单个视图或视图不在列表上且量级较小的情况,会导致离屏渲染。 CAShapeLayer+UIBezierPath:会导致离屏渲染,性能消耗严重,不推荐使用。 Core Graphics:不会导致离屏渲染,推荐使用。 2、什么是隐式动画和显式动画? 隐式动画指的是改变属性值而产生的默认的过渡动画(如background、cornerRadius等),不需要初始化任何类,系统自己处理的动画属性;显式动画是指自己创建一个动画对象并附加到layer上,如 CAAnimation、CABasicAnimation、CAKeyframeAnimation 。 3、UIView 和 CALayer 的区别? UIView 是 CALayer 的 delegate,UIView 可以响应事件,而 CALayer 则不能。 4、离屏渲染? iOS 在不进行预合成的情况下不会直接在屏幕上绘制该图层,这意味着 CPU 和 GPU 必须先准备好屏幕外上下文,然后才能在屏幕上渲染,这会造成更多时间时间和更多的内存的消耗。 5、Objective - C 是否支持方法重载(overloading)? 不支持。方法重载(overloading)

获取当前年月日与日期的封装

[亡魂溺海] 提交于 2020-03-24 11:26:35
3 月,跳不动了?>>> 获取当月,今年: NSInteger toMonth = [[ NSDate date ] YMDComponents ]. month ; NSInteger toYear = [[ NSDate date ] YMDComponents ]. year ; - ( NSDateComponents *)YMDComponents /**< 获取年月日对象 */ { return [[ NSCalendar currentCalendar ] components : NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate : self ]; } 新建objective-C文件------选择category(类别) * @brief 日期格式处理封装 .h文件: @interface NSDate (WQCalendarLogic) - ( NSDate *)firstDayOfCurrentYear; /**< 当年首日 */ - ( NSDate *)firstDayOfCurrentMonth; /**< 当月首日 */ - ( NSDate *)dayFormerePreviousYear; /**< 上一年 */ - ( NSDate *

GET请求和POST请求简单说明

有些话、适合烂在心里 提交于 2020-03-23 00:43:17
一.概述 * HTTP/1.1协议共定义了8中请求方法:OPTIONS, HEAD, GET, POST, PUT, DELETE, TRACE, CONNECT. * GET方法和POST是我们使用最频繁的网络请求方法。 * GET和POST在应用场合有什么区别呢? * GET方法向指定资源发出请求,发送的消息显示的跟在URL后面,用户信息不安全,并且传送信息量有限。(如下所示,在请求中能看到用户名和密码) http://localhost:8080/logandreg/logreg?name=wyg&pwd=1992 * 如果仅仅是向服务器索要数据,没有参数,使用GET比较方便。(如下所示) http://www.baidu.com * POST传送的信息量大,并且传送的信息是被隐藏的,传送信息比较安全,如果向服务器传送数据,建议使用POST. 二.GET请求网络数据(同步,异步) * 如上所述,GET方法可以向指定资源发出请求,比如我们想再网络上请求一张图片在本地上显示,使用GET方法就非常的方便。 * GET请求分为同步请求和异步请求,一般情况下,为了良好的用户体验,我们都使用异步请求。 GET请求 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080

cocoa: 异常和错误处理

谁说我不能喝 提交于 2020-03-22 20:05:25
本篇对cocoa项目中,错误和异常处理做一些总结。也欢迎大家批评交流。 对于异常我们经常使用try-catch: @try { //有可能错误的代码 @throw expression } @catch (NSException *exception) { //捕获异常 } @finally { //最终处理 } 这种形式经常用于开发模式下debug,但是从实际操作来看,用的不多(或者说不知道怎么用)。 我们将错误和异常做了区分: 错误就是需要用户知道的,用户需要即使作出反应或者只需要知道的 异常就是会引起程序奔溃或者不能正常运行,或者即使能正常运行但需要及时修正的 反映到程序上,错误会需要和用户交互,但异常需要尽量的避免。 在实际中,我们这样处理: 1. 发生的错误,需要用户反应才能继续操作的,使用NSAlert: [NSAlert alertWithMessageText:<#(NSString *)#> defaultButton:<#(NSString *)#> alternateButton:<#(NSString *)#> otherButton:<#(NSString *)#> informativeTextWithFormat:<#(NSString *), ...#>] 2. 发生错误,不影响程序运行,用户也不需要马上反应。可以使用NSAlert,或者:

OC中的特有语法

泪湿孤枕 提交于 2020-03-22 18:32:55
一、 分类 -Category 1. 基本用途 如何在不改变原来类模型的前提下,给类扩充一些方法?有 2 种方式 l 继承 l 分类( Category ) 2. 格式 分类的声明 @interface 类名 (分类名称) // 方法声明 @end 分类的实现 @implementation 类名 (分类名称) // 方法实现 @end 3. 好处 一个庞大的类可以分模块开发 一个庞大的类可以由多个人来编写,更有利于团队合作 给 NSString 增加一个类方法:计算某个字符串中阿拉伯数字的个数 给 NSString 增加一个对象方法:计算当前字符串中阿拉伯数字的个数 4. 给系统自带的类添加分类 5. 注意 Category可以访问原始类的实例变量,但不能添加变量,只能添加方法。如果想添加变量,可以考虑通过继承创建子类 Category可以实现原始类的方法,但不推荐这么做,因为它是直接替换掉原来的方法,这么做的后果是再也不能访问原来的方法 多个 Category 中如果实现了相同的方法,只有最后一个参与编译的才会有效 二、 类的本质 1. 类也是个对象 其实类也是一个对象,是 Class 类型的对象,简称“类对象” Class 类型的定义 typedef struct objc_class *Class; 类名就代表着类对象,每个类只有一个类对象 2. +load 和 +

Objective-C NSString/NSMutableString

主宰稳场 提交于 2020-03-19 19:01:56
创建于完成: 2018/02/05 总览: http://www.cnblogs.com/lancgg/p/8404975.html 字符串类 简介 字符码: Unicode NSString 生成了无法更改 Foundation/NSString.h NSString主要方法 (1) Unicode字符串的操作 注: unichar是Unicode表现的一个字符的类型,不同于char 便利构造函数: 先自动呼出alloc的 - (id) initWithUTF8String: (const char*) bytes; 便利构造函数: + (id) stringWithUTF8String: (const char*) bytes; 用和C一样以'\0'结尾的字符串生成 - (__strong const char *) UTF8String; 返回编码为UTF-8的C字符串指针 - (NSUInteger) length; 返回字符串长度 不同于C,不能用来计算需要的大小 ( # TODO: check [?] ) - (unichar) characterAtIndex: (NSUInteger) index; 获取第index个的Unicode字符 - (id) initWithCharacters: (const unichar *) characters length:

iOS - TouchID 指纹识别

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-19 09:30:30
前言 NS_CLASS_AVAILABLE(10_10, 8_0) @interface LAContext : NSObject 指纹识别功能是 iPhone 5s 推出的,SDK 是 iOS 8.0 推出。 推出指纹识别的主要原因是为了简化支付,移动支付的环节越简单越好。 1)指纹验证方式: // 只使用指纹验证 LAPolicyDeviceOwnerAuthenticationWithBiometrics NS_ENUM_AVAILABLE(NA, 8_0) = kLAPolicyDeviceOwnerAuthenticationWithBiometrics, // 使用指纹和设备密码验证,指纹错误或无法验证时会自动跳转到输入密码验证界面 LAPolicyDeviceOwnerAuthentication NS_ENUM_AVAILABLE(10_11, 9_0) = kLAPolicyDeviceOwnerAuthentication 2)指纹验证错误信息: // 指纹无法识别 error.code == -1 LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed, // 用户点击了 "取消" 按钮 error.code == -2 LAErrorUserCancel = kLAErrorUserCancel,

IOS开发之UIPickerView

二次信任 提交于 2020-03-19 04:13:32
前言: UIPickerView 是一个选择器控件, 它可以生成单列的选择器,也可生成多列的选择器,而且开发者完全可以自定义选择项的外观,因此用法非常灵活。UIPickerView 直接继承了 UIView ,没有继承 UIControl ,因此,它不能像 UIControl 那样绑定事件处理方法, UIPickerView 的事件处理由其委托对象完成。 UIPickerView 控件常用的属性和方法如下: numberOfComponents: 获取UIPickerView指定列中包含的列表项的数量。该属性是一个只读属性。 showsSelectionIndicator: 该属性控制是否显示UIPickerView中的选中标记(以高亮背景作为选中标记)。 numberOfRowsInComponent: 获取UIPickerView包含的列数量。 rowSizeForComponent: 获取UIPickerView包含的指定列中列表项的大小。该方法返回一个CGSize对象。 selectRow:inComponent:animated:: 该方法设置选中该UIPickerView中指定列的特定列表项。最后一个参数控制是否使用动画。 selectedRowInComponent:: 该方法返回该UIPickerView指定列中被选中的列表项。 viewForRow

iOS第三方支付-微信支付

一笑奈何 提交于 2020-03-19 02:55:50
微信支付用到的文件 1.首先支持非arc 2.设置URL types 3.AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [WXApi registerApp: @" wxd930ea5d5a258f4f " withDescription: @" demo 2.0 " ]; return YES; } 4.微信回调 // 处理微信通过URL启动App时传递的数据 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:( id )annotation { return [WXApi handleOpenURL:url delegate :self]; } // 微信回调 - ( void )onResp:(BaseResp *)resp { // errCode switch (resp.errCode) { case WXSuccess: // 成功回调 break ; default

UIImageView的序列帧动画

倾然丶 夕夏残阳落幕 提交于 2020-03-17 08:33:04
#pragma mark - 开始动画 - (IBAction)startAnimation { // 1.1 加载所有的图片 NSMutableArray<UIImage *> *imageArr = [NSMutableArray array]; for (int i=0; i<20; i++) { // 获取图片的名称 NSString *imageName = [NSString stringWithFormat:@"%d", i+1]; // 创建UIImage对象 UIImage *image = [UIImage imageNamed:imageName]; // 加入数组 [imageArr addObject:image]; } // 设置动画图片 self.imageView.animationImages = imageArr; // 设置动画的播放次数 self.imageView.animationRepeatCount = 0; // 设置播放时长 // 1秒30帧, 一张图片的时间 = 1/30 = 0.03333 20 * 0.0333 self.imageView.animationDuration = 1.0; // 开始动画 [self.imageView startAnimating]; } #pragma mark - 结束动画 -