♣ 题目部分 在Oracle中,如何得到已执行的目标SQL中的绑定变量的值?...♣ 答案部分 当Oracle解析和执行含有绑定变量的目标SQL时,如果满足如下两个条件之一,那么该SQL中的绑定变量的具体输入值就会被Oracle捕获: l 当含有绑定变量的目标SQL以硬解析的方式被执行时...l 当含有绑定变量的目标SQL以软解析或软软解析的方式重复执行时,Oracle在默认情况下至少得间隔15分钟才会捕获一次。...,Oracle只会捕获那些位于目标SQL的WHERE条件中的绑定变量的具体输入值,而对于那些使用了绑定变量的INSERT语句,不管该INSERT语句是否是以硬解析的方式执行,Oracle始终不会捕获INSERT...查询视图V$SQL_BIND_CAPTURE或V$SQL可以得到已执行目标SQL中绑定变量的具体输入值。
不用急,这里报错是因为Cordova的类引用错误,在命令行创建的工程里Cordova 是以子工程的形式加入到目标工程中,两个工程的命名空间不同,所以import 是用 类似这样的方式#import 中需要加载 cordova.js,需要注意该js 文件的路径,因为我的cordova.js与HTML放在同一个文件夹,所以src 是这样写: 在JS中定义一个数组和一个字典(键值对)。 数组中存放的就是: callbackId与服务、操作、参数的对应关系转成json 存到上面全局数组中。...** 依然是做一个假的URL 请求,然后在UIWebView的代理方法中拦截请求。...Native 调用 JS 方法 这个非常简单,如果是在控制器中,那么只需要像如下这样既可: - (void)testClick { // 方式一: NSString *jsStr = @
也就是说,有线程在访问setter,其他线程只能等待完成后才能访问。 它能保证:即使多个线程「同时」访问这个变量,atomic会让你得到一个有意义的值(valid value)。...nonatomic 而用nonatomic,则不保证你获得的是有效值,如果像上面所述,读、写两个线程同时访问变量,有可能会给出一个无意义的垃圾值。...这样对比,atomic就显得比较鸡肋了,因为它并不能完全保证程序层面的线程安全,又有额外的性能耗费(要对getter和setter进行加锁操作,我验证过,在某个小项目中将所有的nonatomic删除,内存占用平均升高...copy 为了说明copy,我们先举个栗子: 我在某个类(class1)中声明两个字符串属性,一个用copy,一个不用: @property (copy, nonatomic) NSString *nameCopy...这些类型在属性赋值时,右边的值有可能是它们的可变版本。这样就会出现属性值被意外改变的可能。所以它们都应该用copy。
这样的话,我定义一套接口,可以使任意的类都用不同的方式去实现接口中的方法,就是为遵守了protocol的类提供了一些额外访问这个类的一些接口,像delegate和dataSource用protocol实现是最好的...通过这里我们知道我们OC的语言是怎么实现的了吧,就是通过runtime转化成了C++的代码,然后进行运行。 从这你也应该知道为什么OC中叫发送消息,不叫函数调用了吧。...反正我英语水平就这样,我也没查字典,对不对的我就不深究了。一个setter一个getter就在这。...objc_getAssociatedObject 两个参数,一个绑定目标,一个关键字,通过关键字从绑定目标中获取属性的值。 这下是不是明白这两个setter、getter方法的意义了。...然而之所以不爱附上demo链接是因为老司机觉得每次我都已经很详细的在博客中贴出我全部代码而且一句一句讲解真的已经知无不言言无不尽了,我觉得编程这种东西还是得下手敲一遍,看别人的东西看一天也看不懂。
; } 不过也有争议,有人说“苹果如果像下面这样干,是不是效率会高一些?”...与其在setter中判断,为什么不把代码写好? 或者 [a setX:[a x]]; //队友咆哮道:你在干嘛?!! 不要在 setter 里进行像 if(_obj !...obj1 = 0; obj_storeWeak(&obj1, obj); 也就是说: weak 修饰的指针默认值是 nil (在Objective-C中向nil发送消息是安全的) 然后obj_destroyWeak...在 Objective-C 中向 nil 发送消息是完全有效的——只是在运行时不会有任何作用: 如果一个方法返回值是一个对象,那么发送给nil的消息将返回0(nil)。...runtime如何实现weak变量的自动置nil? 能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么? runloop和线程有什么关系?
iOS中的Run loop 我们知道自己需要callback,那在iOS中,具体要怎么实现呢?...Objective-C中有4种途径可以实现回调: 1、Target-action/目标-动作对 先看代码: // 为按钮添加回调——Target-action/目标-动作对 // 第一个参数:发送消息给谁...如果有这个疑问,可以移步到我在知乎回答的问题:如何用简单明了的话解释一下什么是 Objective-C 中的委托?或许可以解答你的部分疑问。...4、Blocks Block算是Objective-C中比较高阶的内容。这样理解吧,Block其实就是在大括号里面的一大段代码,这段代码,会在某事件(event)发生后被执行。...记得最后加分号哦,因为我就是一个常量,就像数字「5;」一样"); }; 带实参、会返回值的Block: // 有实参,有返回值的Block ^(double dividend,
为什么使用floatValue、doubleValue 转化后的数据会出现误差。 要回答这点,我们先要明白这是浮点数在计算机中的存储方式就决定的。先来了解下浮点数在计算机中的存储方式。...我们都知道在计算机的内存中,任何数据都是以0、1的形式被存储记录的,每一个这样的存储单位叫做位(bit),这也是二进制的实现基础。...bit31 共1位 为符号位,1表示负数 所以 8.25 在计算机的实际存储中是这样存储的 ?...NSDecimal是C语言级别的无法直接创建,不幸的是,基础框架没有直接创建的方法,你只能先创建生成一个 NSDecimalNumber 再得到对应的 NSDecimal。...//避免像2.0000这样的被解析成2. 以。。。
,我们可以得到常量的类型信息(NSTimeInterval),进而清楚地知道常量的含义。...而static修饰符则意味着该变量仅在定义此变量的编译单元(在OC语境下,“编译单元”一词通常指每个类的.m实现文件,编译器每收到一个编译单元,就会输出一份“目标文件”)中可见。...那么这里的str为什么可以更改呢?...= static NSString const (* str) static NSString * const str = static NSString * const (str) *在C语言中表示指针指向符...由于此类常量不在全局符号表中,所以无需为其名称加前缀。 4,在头文件中使用extern来声明全局常量,并在相关实现文件中定义其值。
Tech 导读 通过分析Foundation框架中的KVC部分并结合案例分析KVC原理,解释为什么属性为简单数据类型的时候可以设置其值为字符串类型且不会崩溃的真实原因。...最后举例说明KVC使用的场景和高级应用。 01 前言 在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?...由此我的Runner探索之旅开始了!...在技术论坛中看到一则很有意思的KVC案例: 【Objective-c】 @interface Person : NSObject @property (nonatomic, copy) NSString...通过KVC的特性我们可以在日常使用中更加优雅的对数据进行筛选和处理。优点如下:可阅读性更高,健壮性更好。
获得的UUID值系统没有存储, 而且每次调用得到UUID,系统都会返回一个新的唯一标示符。...在我读取NSUUID时,注意到获取到的这个值跟CFUUID完全一样(不过也可能不一样) 三.open UDID 在iOS 5发布时,uniqueIdentifier被弃用了,这引起了广大开发者需要寻找一个可以替代...为什么会使用它?在iOS5之前,都是使用UDID的,后来被禁用。苹果推荐使用UUID 但是也有诸多问题,从而使用MAC地址。...如何正确的获取设备的唯一标识 我用的方法是将获取的UUID永久存储在设备的KeyChain中, 这个方法在应用第一次启动时, 将获取的UUID存储进KeyChain中, 每次取的时候, 检查本地钥匙串中有没有...需要将唯一标示保存到KeyChain中,这样即便是应用卸载了,然后用户在安装也是获取到的唯一的UUID。
比如下面是通过iTunes获取到的公司的测试机的设备信息: ? (有同事问我说为什么我iTunes的电话号码下面是序列号,不是UDID啊,你这是个假的iTunes吧!!...IDFA俗称广告ID,估计在开发者里面提交用过应用的朋友都知道,在最后提交的时候苹果会问你有没有使用广告ID,不知道现在该有没有处于懵逼状态不懂苹果为什么要问这个的同行,看了我们这个就会清楚了为什么会这么问呢...在iOS 7.0之后你再去请求MAC地址,返回的永远都是同一个值!被禁了.........我们用事实说明这个问题,下面的这些结论都是经过自己亲自测试的,在现有的版本中是没有问题的!!! ...最后: 通过上面的对比数据分析,结果我们也给大家了,通过上面的结论,你就知道了使用 UUID + KeyChain 的利弊,在目前中你想要做唯一标识 UUID + KeyChain
代码实现大概就是: + (void)gotoURI:(NSString *)URI { 解析 URI 得到目标和参数 NSString *aim = ...; NSDictionary...比如点击 A 触发跳转到 B 界面,某一时刻又需要点击 A 跳转到 C 界面。 要保证最小粒度的动态调用,就需要目标业务的完整信息,比如上面说的aim和params,即目标和参数。...实际上在 iOS Objective-C 中大概有反射和依赖注入两种思路: 将aim转化为具体的Class和SEL,利用 runtime 运行时调用到具体业务。...组件化总结 对于很多项目来说,并非一开始就需要实施组件化,为了避免在将来业务稳定需要实施的时候束手无策,在项目之初最好有一些前瞻性的设计,同时编码过程中也要尽量降低各个业务模块的耦合。...不要总说“就应该是这样”,而多想“为什么要这样”。
从知道ReactiveCocoa开始就发现对这个库有不同的声音,上次参加技术沙龙时唐巧对在项目中已全面使用FRP的代码家提出为什么这种编程模型出现了这么长时间怎么像ReactiveCocoa这种完全按FRP...其实在我学习的过程中也发现确实会有这个问题,不过就算是有这样那样问题使得ReactiveCocoa这样的库没法大面积使用起来,也不能错失学习这种编程思想的机会。...BOOL值给SMStudent记录下来。...除了block还可以将每次sendNext的积分放入一个数组记录每次的积分变化,在RAC中的Signal就是这样处理的,如下图,这样新加入的subscirber能够读取到积分变化历史记录。...像上面的例子那样其实也能够达到同样的效果,创建一个Model然后通过各个Subject来贯穿视图层和数据层进行send值和多subscribe值的处理。
对于OS来说,创建和加载一个新的cell到内存中,都是要花费时间和内存资源的。这就是为什么tableview总是queue 一个cell进行重用,无论这个cell是否在屏幕之外。...首先我解释一下在这些例子中,我为什么没有使用[UIImage p_w_picpathd:@""]。...使用这个技术,你可以把耗时的的处理任务放到当前线程之外。在我的当前例子中,不会使用多线程,因为你必须立即了解很多新的概念。在本章结束的时候,你应该自己做完这个练习。...通常,对于一个正常的,简单的里面包含很多subviews的UITableView来说,这已经是一个非常好的性能了。这样是非常好的,因为你不必在开始的时候就做很多工作。...因此,你会看到很多真实的应用(像Facebook,这是我们尝试模拟的),滚动性能会被复杂的subviews结构严重影响到。我测试的应用有一个类似图 3-5这样的一个用户界面。 ?
这意味着像下面这样的声明使用ARC编译后指向的是空值(nil): NSObject *myObject1,*myObjects2; 不过要注意的是,与其他高级编程语言不同,ARC不会自动将标量的值设置为零...这意味着以下几行代码声明的变量其值并不等于零: int a; int b; 2.Objective-C命名约定 如果你在Person对象中写了一个叫做newPersonName的方法,ARC...newPersonName方法可以像下面这样标注,以告诉ARC编译器:尽管该方法名称前面是new,返回的却是未保留过的对象指针。 ...-(NSString *)newPersonName NS_RETURNS_NOT_RETAINED; 4.自由桥接 与Objective-C库不同,我们在Objective-C中使用的标准C语言和...在ARC中,__block引用会被保留而不是被复制,这意味着在ARC环境中前面的代码仍然会引发循环保留。
在 ios开发 Runtime 详解part1中我已经解释了Introspection,接下来介绍Runtime的其它特性。 Runtime能做什么?...(动态方法解析) 在苹果的文档里给出了一个动态添加c方法的例子: 例子, 我在这里做一些扩展: 首先我在RuntimeObject.h类中添加三个方法: - (void)addInstanceMethod...// 添加c方法 在RuntimeObject.m中我们有三个方法: /** 动态绑定的实例方法 @param str 传递的参数 */ - (void)instanceMethod: (NSString...name: 是一个selector,指定添加的方法的名字 imp: 实现的新方法,必须包含self和_cmd两个参数,由于oc的方法中默认有这两个参数,在代码中不必特别添加,但是c的方法需要加上这两个参数...动态方法解析可以让我们像对属性修饰@dynamic一样,不让系统提供实现的方法,自定义方法的实现,也可以用来绑定c的方法来进行实现,一旦绑定,我们也可以用performSelector来直接调用.m里绑定的方法
注意:我在添加约束的时候有个选项叫做updateFrame 如果勾选 会直接将Frame调整到真实值 ,而不需要再次update 。...像label 默认是有宽度的 宽度就是字体自适应的。这样我们就可以不给UIlabel 高度 把Label的NumberOfline = 0就可以自适应高度了。 ?...为什么要这样呢? 因为UITextView内容的高度不会影响systemLayoutSizeFittingSize计算。 下面是UITextView的实例: ?...为了简单,C3.xib中我就不加padding之类的了,如图: ?...为了简单,C4.xib中我就不加padding之类的了,如图: ?
在 Objective-C 中,它也可以看作是在许多数据和代码之间分配有限内存资源所有权的一种方式。...野指针: 在 C 中是指没有进行初始化的指针,该指针指向一个随机的空间,它的值是个垃圾值;在 OC 中是指指向的对象已经被回收了的指针(网上很多都是这样解释,但我认为它应该叫 “悬垂指针” 才对)。...例如,你可以像这样实现 fullName 方法: - (NSString *)fullName { NSString *string = [[[NSString alloc] initWithFormat...你还可以像这样实现 fullName 方法: - (NSString *)fullName { NSString *string = [NSString stringWithFormat:@"%...这样做可以防止因为父类初始化失败而返回了一个不可用的对象。如果你不是这样做,你可能你会得到一个不可用的对象,并且它的行为是不可预测的,最终可能会导致你的程序发生Crash。 Why?
前面两篇文章介绍了OC对象的原理,以及一些分析的思路和方法,今天开始,将开启类的原理探究。 不过在探究类的原理之前,我想补充说明一些东西。...&c[0]表示的是数组c中第一个元素的地址;而*d表示的是数组c的值,因此d表示的是数组c的地址,也就是数组c中第一个元素的地址。因此&c[0]与d的值是一样的。...在d前面加*表示的是取地址d的值,因此*(d+i)表示就是数组c中第i个元素的值。 类的结构分析 类是使用Class来接收,这一点我们在开发中已经非常熟悉了。...0x100002358是bits的首地址,也就是bits的指针,因此我们需要强转一下,如下: 现在我得到了bits的指针,那么怎么得到bits里面的值呢?...明明我在LGPerson中没有定义任何方法啊。 其中第一个方法我们也已经看到了,.cxx_destruct是系统默认添加的方法,那么其他两个是什么呢?
对象等同性 对象的等同性 :我们在使用对象的时候,往往需要判断两个对象是否相等,这种相等包含两种含义: 在程序上是否是同一块内存地址 在语义上,是否能指代同一对象 NSString *str = @...比如我们要从数组中查找某个成员 step1:遍历数组中成员 step2:将取出的值与目标值比较,如果相等,则返回该成员 这样查找比较复杂,为了提高查找速度,Hash Table出现了,当成员被加入到...Hash Table中时,会给它分配一个hash值,以标识该成员在集合中的位置,分配这个hash值(即用于查找集合、数组中成员的位置标识)就是通过hash算法计算出来的,且hash方法返回的hash值最好唯一...,和数组相比,基于hash值索引的hash Table查找某个成员的过程就是 step1:通过hash值直接找到查找目标的位置 step2:如果目标位置上有多个相同hash值成员,此时再按照数组方式查找...,只有类的编写者才可以确定俩个对象实例在何种情况下应判定为相等 参考 Effective+Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法
领取专属 10元无门槛券
手把手带您无忧上云