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;
}

输出结果是:

设计模式之接口隔离原则

接口隔离原则的定义

什么是接口?

  • 实例接口(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语言:

-(voidHelloWorld:(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

SyntaxHighlighter中“语言别名”和“语言代码”对应表

语言别名 语言代码 说明
as3 as3 不知道是否支持AS2?
actionscript3 as3
bash bash 竟然还支持Shell.
shell bash
coldfusion coldfusion
cf coldfusion
clojure clojure
clj clojure
cpp cpp
c cpp
c-sharp csharp
csharp csharp
css css
delphi delphi 看来Delphi和Pascal确实有一腿啊!
pas delphi
pascal delphi
diff diff
patch diff
erl erlang
erlang erlang
fsharp fsharp
groovy groovy
java java
jfx javafx
javafx javafx
js jscript 从这里可以看出,针对JavaScript的代码,写js行,写javascript行,甚至是微软的jscript都行。
jscript jscript
javascript jscript
latex latex Not used as a shortcode
tex latex
matlab matlabkey
objc objc
obj-c objc
perl perl
pl perl
php php
plain plain
text plain
ps powershell
powershell powershell
py python
python python
r r Not used as a shortcode
splus r
rails ruby 针对Ruby的。
rb ruby
ror ruby
ruby ruby
scala scala
sql sql
vb vb
vbnet vb
xml xml 针对XML、HTML以及XHTML等,其实都是按照XML来处理的
xhtml xml
xslt xml
html xml
xhtml xml

android.support.v4.app.NavUtils详解

public class

NavUtils

extends Object

[java.lang.Object](http://developer.android.com/reference/java/lang/Object.html)
   ↳ android.support.v4.app.NavUtils

类概述


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

概要


常量
[String](http://developer.android.com/reference/java/lang/String.html) [PARENT_ACTIVITY](http://developer.android.com/reference/android/support/v4/app/NavUtils.html#PARENT_ACTIVITY)
Public Methods
static [Intent](http://developer.android.com/reference/android/content/Intent.html) [getParentActivityIntent](http://developer.android.com/reference/android/support/v4/app/NavUtils.html#getParentActivityIntent(android.content.Context, java.lang.Class<?>))([Context](http://developer.android.com/reference/android/content/Context.html) context, [Class](http://developer.android.com/reference/java/lang/Class.html)<?> sourceActivityClass)
获取一个将要启动的 `[Intent](http://developer.android.com/reference/android/content/Intent.html),` 它必须在应用程序的清单manifest.xml 中的 sourceActivityClass的 `[PARENT_ACTIVITY](http://developer.android.com/reference/android/support/v4/app/NavUtils.html#PARENT_ACTIVITY)` <meta-data>元素中明确指定。
static [Intent](http://developer.android.com/reference/android/content/Intent.html) [getParentActivityIntent](http://developer.android.com/reference/android/support/v4/app/NavUtils.html#getParentActivityIntent(android.content.Context, android.content.ComponentName))([Context](http://developer.android.com/reference/android/content/Context.html) context, [ComponentName](http://developer.android.com/reference/android/content/ComponentName.html) componentName)
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.
static [Intent](http://developer.android.com/reference/android/content/Intent.html) [getParentActivityIntent](http://developer.android.com/reference/android/support/v4/app/NavUtils.html#getParentActivityIntent(android.app.Activity))([Activity](http://developer.android.com/reference/android/app/Activity.html) sourceActivity)
Obtain an `[Intent](http://developer.android.com/reference/android/content/Intent.html)` that will launch an explicit target activity specified by sourceActivity's `[PARENT_ACTIVITY](http://developer.android.com/reference/android/support/v4/app/NavUtils.html#PARENT_ACTIVITY)` <meta-data> element in the application's manifest.
static [String](http://developer.android.com/reference/java/lang/String.html) [getParentActivityName](http://developer.android.com/reference/android/support/v4/app/NavUtils.html#getParentActivityName(android.app.Activity))([Activity](http://developer.android.com/reference/android/app/Activity.html) sourceActivity)
返回 sourceActivit在应用程序清单manifest中指定的 `[PARENT_ACTIVITY](http://developer.android.com/reference/android/support/v4/app/NavUtils.html#PARENT_ACTIVITY)` <meta-data> 的父类的完整名字。
static [String](http://developer.android.com/reference/java/lang/String.html) [getParentActivityName](http://developer.android.com/reference/android/support/v4/app/NavUtils.html#getParentActivityName(android.content.Context, android.content.ComponentName))([Context](http://developer.android.com/reference/android/content/Context.html) context, [ComponentName](http://developer.android.com/reference/android/content/ComponentName.html) componentName)
Return the fully qualified class name of a source activity's parent activity as specified by a `[PARENT_ACTIVITY](http://developer.android.com/reference/android/support/v4/app/NavUtils.html#PARENT_ACTIVITY)` <meta-data> element within the activity element in the application's manifest.
static void [navigateUpFromSameTask](http://developer.android.com/reference/android/support/v4/app/NavUtils.html#navigateUpFromSameTask(android.app.Activity))([Activity](http://developer.android.com/reference/android/app/Activity.html) sourceActivity)
Convenience method that is equivalent to calling `[navigateUpTo](http://developer.android.com/reference/android/support/v4/app/NavUtils.html#navigateUpTo(android.app.Activity, android.content.Intent))`(sourceActivity, `[getParentActivityIntent](http://developer.android.com/reference/android/support/v4/app/NavUtils.html#getParentActivityIntent(android.app.Activity))` (sourceActivity)).
static void [navigateUpTo](http://developer.android.com/reference/android/support/v4/app/NavUtils.html#navigateUpTo(android.app.Activity, android.content.Intent))([Activity](http://developer.android.com/reference/android/app/Activity.html) sourceActivity, [Intent](http://developer.android.com/reference/android/content/Intent.html) upIntent)
Navigate from sourceActivity to the activity specified by upIntent, finishing sourceActivity in the process.
static boolean [shouldUpRecreateTask](http://developer.android.com/reference/android/support/v4/app/NavUtils.html#shouldUpRecreateTask(android.app.Activity, android.content.Intent))([Activity](http://developer.android.com/reference/android/app/Activity.html) sourceActivity, [Intent](http://developer.android.com/reference/android/content/Intent.html) targetIntent)
Returns true if sourceActivity should recreate the task when navigating 'up' by using targetIntent.
[[Expand]](http://developer.android.com/reference/android/support/v4/app/NavUtils.html#)
Inherited Methods
[![](http://developer.android.com/assets/images/triangle-closed.png)](http://developer.android.com/reference/android/support/v4/app/NavUtils.html#) From class [java.lang.Object](http://developer.android.com/reference/java/lang/Object.html)

Constants