< meta http-equiv="description" content="如果直接把限定词long、long long、short、unsigned、signed放在int声明之前,那么所声明的整型变量在某些计算机上具有扩展的值域。例如 long int factorial;其中,long变量的具体精度是由计算机系统决定的(看 计算机是多少位) "/>

iPhone/iPad开发之:扫盲贴

[来源] 达内    [编辑] 达内   [时间]2012-09-13

如果直接把限定词long、long long、short、unsigned、signed放在int声明之前,那么所声明的整型变量在某些计算机上具有扩展的值域。例如 long int factorial;其中,long变量的具体精度是由计算机系统决定的( 计算机是多少位)

  1. #import与@class、#include三者有什么相同与不同?

  在上篇文章中专门有描述

  补充一点:

  @class与#import区别:

  @class 避免循环引用,引用多为实体类头文件

  如果在a.h里import了b.h,那么所有import了a.h的文件都会同时与b.h产生编译依赖,一旦b.h被修改,所有应用了a.h 的文件也要被重新编译。如果可以使用前置声明而不是import b.h,而是用@class,就可以解除这种依赖关系,b.h被修改,只import了a.h的文件就未必需要重新编译。

  2.在头文件中声明类函数时,-(void)print;

  开头的负号(-)通知Objective-C编译器,该方法是一个实例方法。其他唯一的选择是正号(+),它表示类方法。类方法是对类本身执行某些操作的方法,例如创建类的新实例。

  3.import "Fraction.m"

  …

  Fraction *mFraction;

  mFraction = [Fraction alloc];

  mFraction = [mFraction init];

  …

  [mFraction release];

  alloc是allocate的缩写。因为要为新对象分配内存存储空间。

  将alloc消息发送给一个类时,便获得该类的新实例,返回值(已分配的实际Fraction对象)存储在变量mFraction中,alloc方法保证对象的所有实例变量都变成初始状态。但是,这并不意味着该对象进行了适当的初始化进而可以使用。在分配对象之后,还必须对它进行初始化操作:

  mFraction = [mFraction init];

  这里再次使用了一个并非自己编写的方法。init方法用于初始化类的实例变量。mFraction将init消息发送给该对象自己,即,要在这里初始化一个特殊的Fraction对象,因此它是没有发送给类,而是给了类的一个实例。(Andy注:init函数写的好奇怪,很好奇源代码中init里面是怎么实现的???)

  方法可以将alloc和init的操作结合起来,Fraction *mFraction = [Fraction new];可分配和初始化新的Fraction。

  5.NSLog中%x将用十六进制格式显示一个值,该值不带0x,并用a到f之间的小写字符表示十六进制数字。要使用前面的0x显示该值,使用格式字符%#x,

  rgbColor = 0xFFEF0D;

  NSLog("Color is %#x\n",rgbColor);

  %e,使用科学计数法显示数值

  %f,使用浮点计数法显示

  %g,系统自行正确判断是应该使用浮点计数法还是科学计数法来显示浮点值。

  6.OC编译器默认将所有浮点数字看做double值,若手动定义float类型值,需要在数字后面加f或F:12.5f

  7.如果直接把限定词long、long long、short、unsigned、signed放在int声明之前,那么所声明的整型变量在某些计算机上具有扩展的值域。例如 long int factorial;其中,long变量的具体精度是由计算机系统决定的(看计算机是多少位)

  long double变量写成尾部带有字母l或L的浮点变量,1.233e+7L

  同理在NSLog中%Lf用浮点表示法显示long double的值,%Le用科学计数法显示同样的值,而%Lg将告诉NSLog在%Lf和%Le之间任选一个使用。

  8.@synthesize关键字用于告诉Objective-C编译器,为.h文件中声明的实例变量生成一对设置函数方法和获取函数方法。(setXXX(),getXXX() )。

资源下载