首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

编码篇-开发中关于数字的那些事儿

比较的时候 也许少量的计算在你使用你四舍五入的数字后最终的结果和实际的差不多,但是当你进行浮点型小数之间的比较时就炸了 if ([@"0.01" floatValue]<0.01) 没错这个比较返回的是...为什么使用floatValue、doubleValue 转化后的数据会出现误差。 要回答这点,我们先要明白这是浮点数在计算机中的存储方式就决定的。先来了解下浮点数在计算机中的存储方式。...首先了解如何用二进制表示小数(也就是如何把十进制小数转化为二进制表示)这一步很重要是你理解为什么出现误差的关键。...至于想知道为什么是 -128-127而不是 -127-127的同学可以看这里 为什么8位的二进制补码范围是-128-127,而不是-127-127 。...*)decimalNumberWithString:(nullable NSString *)numberValue locale:(nullable id)locale; 这个有点复杂,locale

1.2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JSONModel源码学习

    获取传入字典的所有key,将这些key与保存的所有属性进行匹配。如果匹配成功,则进行kvc赋值。...进行数据的赋值,如果赋值没有成功,就返回nil,并且抛出错误。...大概提取为: 先是获取当前class的property列表和个数 然后再遍历这些property 把我们的property通过一个局部变量进行赋值–JSONModelClassProperty,这个是...获取property的名称给当前这个局部变量 获取这个property的属性 扫描property属性 设置property的类型 判断并设置property的是否是可变的 判断property...value可用的情况下,就开始进行赋值,有setter方法的通过setter方法赋值,基础类型int,float等直接赋值,如果property又是一个JSONModel,就递归先将子Model进行整体解析

    1.4K00

    Apple Pay强势来袭,开发者应做的事情--转自Bison的技术博客

    iOS8.1就已经有这个功能了,只是木有现在这么的火,现在的趋势是要火的节奏,因此很多电商平台B2B,P2P,C2C,X2X都有可能需要这个屌丝的付款功能了,在此简单的研究一下。...4.png 正如上图提示的一样,你可能会注意到上面没有有效的Merchant ID,我们需要创建一个,访问苹果iOS 开发者中心的位于Identifiers > Merchant ID的页面。...这个和其他证书差不多再此不做过多的阐述。下图是已经创建好的参考图片。 ? 5.png 下载安装然后刷新下刚刚项目里面的界面,选择打勾即可,可以看到如下图 ?...PKPaymentAuthorizationStatusFailure); // do something to let the user know the status NSLog(@"支付失败...PKPaymentSummaryItem *widget4 = [PKPaymentSummaryItem summaryItemWithLabel:@"总金额" amount:[NSDecimalNumber

    72030

    为什么不能在init和dealloc函数中使用accessor方法

    方法里调用了setter给value属性赋值。...造成这个问题的原因有两个:一就是在父类的init使用了setter;二是子类重写了setter,导致在父类init时就会调用子类重写的setter,万一重写的setter中进行了一些子类特有的操作就可能会出现问题...,比如,给子类的某个属性赋值失败,因为此时子类对象self还没有初始化完成。...而当子类对象通过setter给value赋值时,又会调用父类的setter。那么相当于父类的setter被调用了两次,发送了两次相同的网络请求。...此外,属性可能正处于“键值观察”(Key-Value Observation,KVO)机制的监控之下,该属性的观察者(Observer)可能会在属性值改变时“保留”或使用这个即将回收的对象。

    9.2K40

    YYCache 源码解析(二):磁盘缓存的设计与缓存组件设计思路

    即是说,如果缓存数据的长度大于这个值,就使用文件存储;如果小于这个值,就是用sqlite存储。...来看一下这个属性是如何使用的: 首先我们会在YYDiskCache的指定初始化方法里看到这个属性: //YYDiskCache.m - (instancetype)initWithPath:(NSString..._inlineThreshold = threshold; ... } 在这里将_inlineThreshold赋值,也是唯一一次的赋值。...这个_kv就是上面提到的YYKVStorage的实例,它在YYDiskCache的初始化方法里被赋值: //YYDiskCache.m - (instancetype)initWithPath:(NSString...这个技巧在该框架中很常见,举一个删除一个内存缓存的例子: 首先将这个缓存的node类取出,然后异步将其释放掉。

    2K20

    iOS 组件化-路由解耦思想 JLRoutes 实战篇(一)App内控制器跳转

    ==Demo 在文章最== 为什么 Router 路由基础三问, 每次接触新颖思想框架时, 我都会不禁的问自己这几个问题, 希望通过下面几个简要的概括, 能很好的帮助大家理解 Router; 路由是什么...,解决了什么问题 [图片上传失败......==Demo 在文章最== 为什么 Router 路由基础三问, 每次接触新颖思想框架时, 我都会不禁的问自己这几个问题, 希望通过下面几个简要的概括, 能很好的帮助大家理解 Router; 路由是什么...为什么要用路由来实现 VC 跳转 Router 能做的事情很多, 首先我们用它来解决棘手的控制器耦合关系,是一种非常有效的解决方案; 在 App 中控制器跳转普遍分为 3 种, 模态跳转Modal(..., 所以我们先检测实例 VC 是否包含这个属性, [vc respondsToSelector:NSSelectorFromString(key)], 如果 VC 有这个属性则直接使用 KVC 的方式来进行赋值

    1.6K20

    iOS下JS与OC互相调用(八)--Cordova详解+实战

    原因是Cordova 部分类中,并没有#import ,但是它们却使用了这个库里的NSArray、NSString 等类型。...为什么用在终端里用命令行创建的工程就正常呢? 那是因为用命令行创建的工程里已经包含了pch 文件,并且已经import 了 Foundation框架。截图为证: ?...这里把www添加进工程时,需要注意勾选的是create foler references,创建的是蓝色文件夹。 ? 最终的目录结构如下: ? 上面为什么说是方便起见呢?...这里有几个需要注意的地方: self.startPage的赋值,必须在[super viewDidLoad]之前,否则self.startPage 会被默认赋值为index.html。...使用这种方式时,在JS 调用原生功能时,必须设置执行成功的回调和执行失败的回调。

    2.7K20

    alloc 、init、new详解

    NSString.png 实际上,将NSString换成其他的类型,例如:NSArray、NSDictionary等等,会发现结果同NSString。 为什么NSString的两次内存地址不一样?...首先,NSObject是所有类的根类,申明了init方法,看一下NSString的init方法: - (id)init { if(self = [super init]) {// 重新赋值...同样,在打印一次NSString,会发现NSString的对象在init后和superClass的地址是一样的。 alloc 看一下帮助文档: ?...这个实例初始化后可以用来表示这个类的数据相关的结构;所有其他的实例变量的值都被设置成 0....结论: 重写 init 方法时需要先初始化父类的 init 方法. NSObject 中的 init 方法什么也没做,只是返回了自己而已. 如果初始化失败,会返回 nil. new 帮助文档: ?

    95830

    HTTP协议中的401授权认证机制在iOS上的实现

    NSURLCredentialPersistenceForSession, //只在本次会话中有效 NSURLCredentialPersistencePermanent //永久有效,保存在钥匙串中,其他也有效 为什么服务器信任的凭证不需要保存到存储中...,原因是服务器信任的凭证总是从服务器下发给客户端的 为什么要有保存策略呢?...; //用户密码输入失败的重复次数。...,如果有凭证对象则会把凭证对象赋值给数据成员proposedCredential,建立挑战对象后判断当前有没有实现NSURLConnection的willSendRequestForAuthenticationChallenge...的函数,如果没有实现则根据凭证对象来调用sender的接受挑战或者失败函数,而如果是我们实现了willSendRequestForAuthenticationChallenge就需要我们自己来处理如何接收挑战了

    1.3K30

    iOS下JS与OC互相调用(一)--UIWebView 拦截URL

    ---- 今天就详细的介绍一下使用UIWebView拦截URL 的方式来实现JS与OC 的交互。 为什么不使用第三方库或者RAC呢?...loadURL的实现来自关于UIWebView和PhoneGap的总结一文。 2.为什么loadURL 中的链接,使用统一的scheme?...3.为什么自定义一个asyncAlert方法? 答:因为有的JS调用是需要OC 返回结果到JS的。...return YES,webView 就会加载这个链接;return NO,webView 就不会加载这个连接。我们就在这个拦截的代理方法中处理自己的URL。...OC调用JS方法 关于将OC 执行结果返回给JS 需要注意的是: 如果回调执行的JS 方法带参数,而参数不是字符串时,不要加单引号,否则可能导致调用JS 方法失败。

    3.6K40

    环信SDK 头像、昵称、表情自定义和群聊设置的实现 一(附源码)

    在说说这个 EaseUI,这么说吧,只要和界面相关的东西都在这个文件夹里面!!EaseUI这里面最重要的是ViewController这个文件夹了: ? 箭头标注出来的地方,大家注意这个继承关系!...当显示昵称和头像时,请从本地或者缓存中读取,不要直接从消息中把赋值拿给界面(否则当用户昵称改变后,同一个人会显示不同的昵称)。...我们再说这个发送消息的时候,把自己的个人信息附加在扩展消息当中发送出去,这里我们就用发送文本消息为例子,其他的都一样: 你找到EaseSDKHelper.m这个文件,这里面有这个方法 +(EMMessage...extDic setValue:READUSERDEFAULTS(UserHeadImage) forKey:CHATUSRTHEADIMAGE]; return extDic; } 最后就是接收到之后的赋值了...你不需要给它再去赋值,因为这些Demo当中已经写好了,你要一直写到这里了,你可以试试效果了!

    1.3K80

    RunTime 之常规操作

    NSString、Class、SEL之间的转化(反射机制) 根据字符串动态生成一个UIViewController并跳转 动态创建一个类、添加属性变量并对属性变量赋值,添加方法并调用新方法 获取一个类的所有方法...并初始化; 为这个类增加一个实例变量,通过KVC给这个实例变量赋值。...为这个类增加一个方法。在这个方法中打印一些值。 通过这个类的实例调用新增的方法。...*str = @"我是test"; // 通过KVC的方式给myObj对象的test属性赋值 [myobjc setValue:str forKey:@"test"]; // 如果不调用- (void...NSLog(@"添加变量成功"):NSLog(@"添加变量失败"); 动态改变对象的某个变量值. 可以是属性变量(注意加 _ ),也可以是私有的全局变量.

    59330

    block内部实现

    int c = 10; static int d = 10; void (^testBlock)(int a, NSString *b) = ^(int a, NSString...同学可以去验证下 // 没有修饰的为值传递 int c; // static 修饰的为地址传递 int *d; // 构造函数 c(_c), d(_d) 直接_d 给d赋值 直接_c 给...通过这个 我们可以知道 d为地址传递 c为值传递。所以当d重新赋值后, 因为d传递的是d变量的地址。所以值会跟着改变,而c为值传递 所以当c改变的时候 block结构体中并不会跟着改变。...impl.isa = &_NSConcreteStackBlock; impl.Flags = flags; impl.FuncPtr = fp; Desc = desc; }}; 问:为什么...答: 因为impl为__ main_block_impl_0中的第一个结构体.在内存中是头指针是指向的一个地址 所以可以转换。 3>. 结论 通过上述的源码 我们可以知道了结构体的大致结构。

    41010

    iOS_单元测试三之OCMock使用

    another method OCMStub([partialMockPerson name]).andDo(^(NSInvocation *invocation){ // 调用name方法时,将会调用这个...9.2、重新验证失败后快速抛出异常 Re-throwing fail fast exceptions in verify all 在快速失败模式下,异常可能不会导致测试失败(如:当方法的调用堆栈未在测试中结束时...) OCMerifyAll调用时,快速失败异常将重新引发,可以确保检测到来自通知等不需要的调用 9.3、存根创建对象的方法 Stubbing methods that create objects MOPerson...当开发人员尝试为此类创建模拟程序时,将引发异常,解释问题说在 该方法在单独调用中返回不同的值是可以接受的,这使它在运行时对特定条件做出反应 如果该方法为reason赋值,返回值将被忽略 对于所有未实现此方法的类...来自多个线程的模拟对象上的任何操作组合都可能导致问题并使测试失败 从 OCMock 3.3 开始,仍然需要从单个线程调用所有设置和验证操作,最好是测试运行程序的主线程。

    3.2K20
    领券