https://www.gravatar.com/avatar/7a0c24f697ea1587001c36d00039b60f?s=240&d=mp

Objective-C语法学习-限定词:long、long long、short、unsigned及signed

与Java不同,objc中的Long是用来修饰其他类型的,比如

long int

如果直接把限定词long放在int声明之前,那么所声明的整型变量在某些计算机上具有扩展的值域。例子如下:

[objc] long int factorial; [/objc]

就像float和double变量一样,long变量的具体精度也是由具体的计算机系统决定的。在许多系统上,int与long int具有相同的值域,而且任何一个都能存储32位宽的整型值。

long int 类型的常量值可通过在整型变量末尾添加字母L(大小写均可)来形成。但数字和L之间不允许有空格。例如:

[objc] long int numberOfPoints = 131071100L; [/objc]

要用NSLog显示long int的值,使用字母l作为修饰符并放在整型格式符号i、o和x之前。这意味着格式符号%li用十进制格式显示long int的值。%lo用八进制显示。%lx用十六进制格式显示。

long long

[objc] long long int maxAllowedStorage; [/objc]

这条语句把将指定的变量声明为具有特定扩展精度的变量,该扩展精度保证变量至少具有64位的宽度。NSLog字符串表示方法为%lli。使用两个l。

long double

[objc] long double US_deficit_2004; [/objc]

long double常量可写成其尾部带有字母l或L的浮点常量,如下:

[objc] 1.234e+7L [/objc]

要显示long double 的值,需要使用修饰符L。因此,%Lf表示用浮点计数法显示,%Le用科学计数法显示,而%Lg表示用上述两种中任选一种表示。

short int

short int 用来告诉objective-c编译器要声明的特定变量用来存储相当小的整数。之所以使用short变量,主要原因是对节约内存空间的考虑,当程序员需要大量内存而可用的内存量又十分有限时,就可以用short变量来解决这个问题。

在某些计算机上,short int 占用的内存空间是常规int变量所占空间的一半。在任何情况下,确保分配给short int的空间数量不少于16位。

在objective-c中,没有其他方法可显式地编写short int 型常量。要显示short int变量,可将字母h放在任何普通的整型转换符号之前,例如:%hi,%ho或者%hx。

unsigned int

[objc] unsigned int counter; [/objc]

向编译器声明:变量counter只用于保存正值。通过限定整型变量的使用,使它专门存储正整数,可以扩展整型变量的精度。

声明unsigned类型常量,需要在值后添加u(U)。例如:

Objective-C语法学习-数据类型和表达式

objective-c的基本类型和Java中一致。

objective-c的数据类型如下:

http://www.ithome.me/wp-content/uploads/2013/12/type-300x196.png

NSLog是打印函数,相当于c语言的printf(),或者Java里面的system.out.print()。

http://www.ithome.me/wp-content/uploads/2013/12/formate-300x109.png

int类型

和Java一样,objc的八进制表示:如果整形值的第一位是0,那么这个整数将用八进制计数法来表示,就是说用基数8来表示。在这种情况下,该值的其余位必须是合法的八进制数字,也就是必须是0到7之间的数字。因此,在objc中以八进制表示的值50(等价于十进制40),表示方式为050。与此类似,八进制的常量0177表示十进制的值127(1x64+7x8+7)。通过在NSLog调用的格式字符串中使用格式符号%o,可在终端上用八进制显示整形值。这种情况下显示的八进制值不带前导0,如果像显示0,可以用格式符号%#o。

关于十六进制的表示,通过0x开头。比如0xFFEF0D。格式输出符号是%x将用十六进制格式显示一个值,该值不带前导0x。如果要显示0x,需要用%#x。如果用%X或者%#X,注意X是大写,可用于十六进制中字母的大写输出。

float类型

声明为float类型的变量可存储包含小数位的值。要区分浮点常量,可通过产看其是否包含小数点。可以省略小数点前面或者后面的数字。值3.、125.8、以及-.0001都是合法的浮点常量。要显示浮点值,可用NSLog转换字符%f。

浮点常量也能使用科学计数法来表示。比如1.7e4,2.25e-3。e字母可用大小写。

要用科学计数法显示值,可以用格式输出符号%e。另外%g可以让NSLog自己确定使用浮点计数法还是科学计数法来显示值。具体怎么显示取决于值的大小。

double类型

类型double于float非常相似,而在float变量所提供的值域不能满足要求时,就要使用double变量。声明为double类型的变量可存储的位数大概是float变量所存储的两倍多。大多数计算机使用64位来便是double值。

除非另有说明,否则,objc编译器将所有的浮点常量均看作double值。要清楚地表示float常量,需要在数字的尾部添加一个f或者F,例如12.5f

要显示double值,可用格式符号%f,%e或者%g,他们与显示float值所用的格式符号是相同的。

char类型

char变量可存储单个字符。将字符放入一对单引号中就能得到字符常量,因此,‘a’,’;‘和'0’都是合法的字符常量。

不要把字符常量和字符串混为一谈,字符常量是放在单引号中的单个字符,而字符串则是放在双引号的任意个数的字符。

字符常量’\n’(换行符)是一个合法的字符常量,将官它似乎与前面提到规则矛盾。出现这种情况的原因是反斜杠符号是objc系统中的特殊符号,实际上并不把它看成一个字符。换句话说,objc编译器将字符’\n’看作单个字符,尽管它实际上由两个字符组成。

我们总结下前面的数据类型,如下代码

#import <Foundation/Foundation.h>

int main(int argc,char* argv[])
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
int integerVar = 100;
float floatingVar = 331.79;
double doubleVar = 8.44e+11;
char charVar = 'W';
NSLog(@"integerVar=%i",integerVar);
NSLog(@"floatingVar=%f";,floatingVar );
NSLog(@"doubleVar =%e";,doubleVar );
NSLog(@"doubleVar =%g";,doubleVar );
NSLog(@"charVar =%c";,charVar );

[pool drain];
return 0;
}

输出结果是:

integerVar=100
floatingVar=331.790009
doubleVar=8.440000e+11
doubleVar=8.44e+11
charVar='w'

在程序输出的第二行,你会注意到指派给floatingVar的值331.79,实际显示成了331.790009。事实上,实际显示的值是由使用的特定计算机系统决定的。出现这种不准确值的原因是:计算机内部使用特殊的方式表示数字。使用计算器处理数字时,很可能遇到相同的不准确性。如果用计算器计算1除以3,将得到结果.33333333,很可能结尾带有一些附加的3.这串3是计算器计算1/3的近似值。理论上,应该存在无限个3。然而计算器只能保存这些位的数字,这就是计算机的不确定性。

在计算机内存中不能精确地表示一些浮点值。

设计模式之接口隔离原则

接口隔离原则的定义

什么是接口?

  • 实例接口(Object Interface),在Java中声明一个类,然后用new关键字产生一个实例,它是对一个类型的实物的描述,这是一种接口。Java中的类也是一种接口。

  • 类接口(Class Interface),Java中使用interface关键字定义的接口。 什么是隔离?

  • 客户端不应该依赖它不需要的接口。

  • 类间的依赖关系应该建立在最小的接口上。  

http://www.ithome.me/wp-content/uploads/2013/12/uml1-300x165.png

[转]十分钟让你明白Objective-C的语法(和Java、C++的对比)

很多想开发iOS,或者正在开发iOS的程序员以前都做过Java或者C++,当第一次看到Objective-C的代码时都会头疼,Objective-C的代码在语法上和Java, C++有着很大的区别,有的同学会感觉像是看天书一样。不过,语言都是相通的,有很多共性。下面列出Objective-C语言的语法和Java,C++的对比,这样你就会很容易Objective-C的语法是怎么回事了。

先目睹一下Objective-C头文件和实现文件里都有什么:

头文件:

**http://my.csdn.net/uploads/201206/06/1338944767_4464.png **

实现文件, 类似于C++的.cpp文件:

**http://my.csdn.net/uploads/201206/06/1338944788_1528.png **

** **

** 一、函数的对比** helloworld方法 Java 语言:

public void helloWorld(boolean ishelloworld) {
    //干点啥
}

C++语言:

void helloWorld(bool ishelloworld) {
	//干点啥
}

Objective-C语言:

-(void) HelloWorld:(BOOL)ishelloworld{
	//干点啥
}

前面带有减号(-) 的方法为实例方法,必须使用类的实例才可以调用的。对应的有+号, 代表是类的静态方法,不需要实例化即可调用。

二、消息。
消息的定义:向对象发送信息。 消息是ios的运行时环境特有的机制。 和C++,Java下的类,或实例调用类或实例的方法类似。我这说的是类似,他们的机制实际上是有很大的差别。 例子:

[object  message]

[object  message:param1 withParameter:param2]
NSString *string;
string = [[NSString alloc] initWithString:@&quot;Hello&quot;];

上面的代码类似于:

java/c++: object.message()  
java/c++: object.message(param1,param2)
java/c++: 
string *str ;
str = new string("Hello");

三、Import

android.support.v4.app.NavUtils详解

public class

NavUtils

extends Object

类概述


NavUtils为应用实现Android UI所推荐的导航模式提供了辅助功能.关于推荐导航模式的相关信息请参考开发者指南中的 Tasks and Back Stack  和设计指南中的 Navigation .

概要


Constants


public static final String  PARENT_ACTIVITY

Public Methods


public static Intent  getParentActivityIntent (Context  context, Class <?> sourceActivityClass)

Obtain an [Intent](http://developer.android.com/reference/android/content/Intent.html) that will launch an explicit target activity specified by sourceActivityClass’s [PARENT_ACTIVITY](http://developer.android.com/reference/android/support/v4/app/NavUtils.html#PARENT_ACTIVITY) <meta-data> element in the application’s manifest.