第一条: 了解Objective-C语言的起源 由Smalltalk演化而来,消息型语言的鼻祖(messaging structure)而非 (function calling)函数调用 //Messaging (Objective-C) Object *obj = [objective new]; [obj performWith:parameter1 and:parameter2]; //Function calling (C++) Object *obj = new Object; obj…
第一条:了解Objective-C语言的起源 Objective-C使用的消息结构而非函数调用. Objective-C的重要工作都由"运行组件(runtime component)"而非编译器来完成.使用Objective-C的面向对象特性所需的全部数据结构以及函数都在运行期组件里面.需要明白:Objective-C语言中的指针是用来指示对象的.想要声明一个变量,令其指向某个对象,可用以下语法: NSString *someString = @"The string&quo…
1.OC语言是由Smalltalk演化而来.该语言使用“消息结构” 而 非“函数调用”. 使用“消息结构”的语言,其运行时所执行的代码由运行环境来决定: 编译器不需要关心接收消息的对象是什么类型,只在运行时才会去查找所要执行的方法,这也叫动态绑定. 而使用“函数调用”的语言,则由编译器决定. 2.OC对象是分配在堆(heap)中,不能在栈(stack)中分配OC对象. 分配在堆中的内存必须直接管理,而分配在栈上的用于保存变量的内存则会在其栈帧弹出时自动清理.(也就是堆内存由程序员管理(借助“引用…
第一章 熟悉Objective -C   编写高质量iOS与OS  X代码的52 个有效方法   第一条: 了解Objective-C 语言的起源 关键区别在于 :使用消息结构的语言,其运行时所应执行的代码由运行环境来决定.而使用函数调用的语言,则由编译器决定.如果范例代码中调用的函数是多态的,那么在运行时就要按照虚方法表 virtual table 来查出到底应该执行那个函数实现.而采用消息结构的语言,不论是否多态,总是在运行时才会去查找所要执行的方法. 实际上,编译器甚至不关心接受消息的对象…
第二章  创建和销毁对象 第一条 使用静态工厂方法替代构造器,原因: 静态工厂方法可以有不同的名字,也就是说,构造器只能通过参数的不同来区分不同的目的,静态工厂在名字上就能表达不同的目的 静态工厂方法不用每次调用的时候都创建新的对象(其实是因为它是static的,所以只能用static的,所以是一早就创建了,不需要重复创建吧..),比如书中 Boolean.valueOf(boolean) public static final Boolean TRUE = new Boolean(true);…
<c:forEach>标签具有以下一些属性: var:迭代参数的名称.在迭代体中可以使用的变量的名称,用来表示每一个迭代变量.类型为String. items:要进行迭代的集合.对于它所支持的类型将在下面进行讲解. varStatus:迭代变量的名称,用来表示迭代的状态,可以访问到迭代自身的信息. begin:如果指定了items,那么迭代就从items[begin]开始进行迭代:如果没有指定items,那么就从begin开始迭代.它的类型为整数. end:如果指定了items,那么就在ite…
将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第11篇,我尽量每周四篇 第4章 第一条指令ori的实现 前面几章介绍了非常多预备知识,也描绘了即将要实现的OpenMIPS处理器的蓝图,各位读者是不是早已摩拳擦掌,迫切希望一展身手了,好吧,本章我们将实现OpenMIPS处理器的第一条指令ori,为什么选择这条指令作为我们实现的第一条指令呢?答案就两个字--简单.指令ori用来实现逻辑"或"运算,选择一条简单的指令有助于我们排除干扰.将注意力集中在流水线结构的实…
分组中的第一条:select * from(select row_number() over(partition by 列1,列2,... order by 列1,列2,...) as rownum -- 排序并分组, * -- 所需显示的字段from 表) as Twhere T.rownum = 1 显示聚合以外的列: SELECT  a.examroomnum ,          a.positionnum ,          a.人数 ,          a.sumintervie…
LINQ分组取出第一条数据 Person1: Id=1, Name="Test1" Person2: Id=1, Name="Test1" Person3: Id=2, Name="Test2" 以上list如果直接使用distinct方法进行过滤,仍然返回3条数据,而需要的结果是2条数据.下面给出解这个问题的方法: 方法1: Distinct 方法中使用的相等比较器.这个比较器需要重写Equals和GetHashCode方法,个人不推荐,感觉较…
结合上面的文章,CPU上电后第一条指令是通过CS:IP来指定的,CPU厂家会给其初始值,对于386处理器来说,CPU第一条指令地址是 0xFFFFFFF0 这里会有一个问题,CPU怎么能一上来就去0xFFFFFFF0取指令呢?因为此时的内存都没有初始化呢,内存中什么都没有,第一条指令毫无疑问肯定在BIOS中,现在用来烧写BIOS的Flash芯片一般也就256KB.1MB.4MB,都是非常小的,怎么也没有0xFFFFFFF0这个地址的. 这里就需要说一下x86的地址编码方式了,我们平时说的内存,主…