关于作者

姓名:

性别:男

出生日期:--

地区:辽宁-沈阳

联系电话:

QQ:--

婚否:已婚
用户名:qinjiwy
笔名:佳佳爸
地区: 辽宁-沈阳
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



友情连接

友情博客

IT技术网站

各类IT技术网站

播客网站

友情blog

孩子教育

访问统计:
文章个数:103
评论个数:12
留言条数:1




Powered by BlogDriver 2.1

佳佳爸

 

来这里,体验 程序人生

文章

[转]Objective-C语法快速参考

大部分有一点其他平台开发基础的初学者看到XCode,第一感想是磨拳擦掌,看到Interface Builder之后,第一感想是跃跃欲试,而看到Objective-C的语法,第一感想就变成就望而却步了。好吧,我是在说我自己。

 

如 果你和我一样,对苹果相关的开发:Mac OS X或是iPhone有兴趣,但是第一时间看到Objective-C就会头疼并伴有发烧症状的话,疗效比较好的快速治疗方法是阅读本文。大概花二十分钟左 右,而且绝不无聊的时间,你就会对Objective-C有那么一点点了解,至少读读例子不会那么头疼了。

 

不过假定你要有那么一点点c++、c#或是java的基础,至少能看到c++、c#或是java的源码,能够大致明白说得是什么。

 

这篇文章不是一篇科技文章,希望你也不要把它当做科技文章来读。文章非常不严谨,但是我相信你能看得懂。

 

一、XCode、Objective-C、Cocoa说的是几样东西?

答案:三样东西。

 

XCode:你可以把它看成是一个开发环境,就好像Visual Studio或者Netbeans或者SharpDevelop一样的玩意。你可以将Interface Builder认为是Visual Studio中用来画界面的那部分功能单独提出来的程序。

 

Objective-C:这是一种语言,就好像c++是一种语言,Java是一种语言,c#是一种语言,莺歌历史也是一种语言一样。

 

Cocoa:是一大堆函数库,就好像MFC.NETSwing这类玩意,人家已经写好了一堆现成的东西,你只要知道怎么用就可以了。

 

有些人会比较容易混淆Objective-CCocoa,就好像有些人会混淆c#.NET一样。这两个东西真的是两个不一样的东西。

二、Objective-C是什么?

你可以把它认为是语法稍稍有点不一样的c语言。虽然第一眼望上去你可能会认为它是火星语,和你所认知的任何一种语言都不一样。

 

先简单列出一点差别:

 

问题一:我在程序中看到大量的减号、中括号和NS****这种东西,他们是什么玩意儿?

 

1 减号(或者加号)

 

减号表示一个函数、或者方法、或者消息的开始,怎么说都行。

 

比如c#中,一个方法的写法可能是:

private void hello(bool ishello)

{

//OOXX

}

 

用Objective-C写出来就是

-(void) hello:(BOOL)ishello

{

//OOXX

}

挺好懂的吧?

 

不过在Objective-C里面没有publicprivate的概念,你可以认为全是public

 

而用加号的意思就是其他函数可以直接调用这个类中的这个函数,而不用创建这个类的实例。

 

2 中括号

 

中括号可以认为是如何调用你刚才写的这个方法,通常在Objective-C里说“消息”。

 

比如C#里你可以这么写:

 

this.hello(true);

 

在Objective-C里,就要写成:

 

[self hello:YES];

 

3 NS****

 

老乔当年被人挤兑出苹果,自立门户的时候做了个公司叫做NextStep,里面这一整套开发包很是让一些科学家们喜欢,而现在Mac OS用的就是NextStep这一套函数库。

 

这些开发NextStep的人们比较自恋地把函数库里面所有的类都用NextStep的缩写打头命名,也就是NS****了。比较常见的比如:

 

NSLog

NSString

NSInteger

NSURL

NSImage

 

你会经常看到一些教学里面会用到:

NSLog (@"%d",myInt);

 

这句话主要是在console里面跟踪使用,你会在console里面看到myInt的值(在XCode里面运行的时候打开dbg窗口即可看到)。而我们在其他开发环境里面可能会比较习惯使用MessageBox这种方式进行调试。

 

你还可以看到其他名字打头的一些类,比如CF、CA、CG、UI等等,比如

CFStringTokenizer 这是个分词的东东

CALayer 这表示Core Animation的层

CGPoint 这表示一个点

UIImage 这表示iPhone里面的图片

 

CF说的是Core Foundation,CA说的是Core Animation,CG说的是Core Graphics,UI说的是iPhone的User Interface……还有很多别的,等你自己去发掘了。

 

问题二、#import、@interface这类玩意说的是什么?

 

1、#import

 

你可以把它认为是#include,一样的。但是最好用#import,记住这个就行了。

 

2、@interface等等

 

比如你在c#中写一个抓孩子类的定义:

 

public class Kids : System

{

private string kidName=”mykid”;

private string kidAge=“15”;

private bool isCaughtKid()

{

return true;

}

}

 

当然,上面的写法不一定对,就是个用于看语法的举例。

 

在Objective-C里就得这么写:

 

先写一个kids.h文件定义这个类:

 

 

@interface Kids: NSObject {

NSString *kidName;

NSString *kidAge;

}

-(BOOL) isCaughtKid:;

@end

 

再写一个kids.m文件实现:

 

#import “kids.h”

@implementation Kids

-(void) init {

kidName=@”mykid”;

kidAge=@”15”;

}

 

-(BOOL) isCaughtKid:{

return YES;

}

@end

 

这个写法也不一定对,主要是看看语法就行了。-_-b

 

问题三、一个方法如何传递多个参数?

 

一个方法可以包含多个参数,不过后面的参数都要写名字。

 

多个参数的写法

 

(方法的数据类型) 函数名: (参数1数据类型) 参数1的数值的名字 参数2的名字: (参数2数据类型) 参数2值的名字 …. ;

举个例子,一个方法的定义:

 

-(void) setKids: (NSString *)myOldestKidName secondKid: (NSString *) mySecondOldestKidName thirdKid: (NSString *) myThirdOldestKidName;

 

 

实现这个函数的时候:

 

 

-(void) setKids: (NSString *)myOldestKidName secondKid: (NSString *) mySecondOldestKidName thirdKid: (NSString *) myThirdOldestKidName{

大儿子 = myOldestKidName;

二儿子 = mySecondOldestKidName;

三儿子 = myThirdOldestKidName;

}

 

调用的时候:

 

 

Kids *myKids = [[Kids alloc] init];

[myKids setKids: @”张大力 secondKid: @”张二力 thirdKid: @”张小力];

 

而如果你用c#写这个方法,大致的写法可能是

 

public void setKids( string myOldestKidName, string mySecondOldestKidName, string myThirdOldestKidName)

{

}

 

调用的时候大概的写法可能是:

 

Kids myKids = new Kids();

myKids.setKids (“张大力”, “张二力”, “张小力”);

 

明白了吧?其实不怎么难看懂。

  

基本上,如果你能了解下面这段代码的转换关系,你Objective-C的语法也就懂了八成了:

 

[[[MyClass allocinit:[foo bar]] autorelease];
 

转换成C#或者Java的语法也就是:

MyClass.alloc().init(foo.bar()).autorelease();

三、其他的一些东西

 

其实这些本站之前的文章有所提及,这里再详细解释一下。

 

1、 id:

 

Objective-C有一种比较特殊的数据类型是id。你可以把它理解为“随便”。

 

在Objective-C里,一切东西都是指针形式保存,你获取到的就是这个对象在内存的位置。那么id就是你知道这个位置,但是不知道里面是啥的时候的写法。

 

2、 同一个数组可以保存不同的对象:

 

比如一个数组NSArray,这种数组里面可以保存各种不同的对象,比如这个数组里:

 

myArray <—-|

 

                       0: (float) 234.33f

                       1: @”我是个好人”

                       2: (NSImage * (俺的美图)

                       3: @”我真的是好人”

 

这是一个由4个东西组成的数组,这个数组包括一个浮点数,两个字符串和一个图片。

 

3、BOOL,YES,NO:

你可以认为YES表示C#或者Java里的trueNO表示false。而实际上YES1NO0BOOL本身就是个char

 

4、IBOutlet、IBAction是啥玩意,总能看到。

这两个东西其实在语法中没有太大的作用。如果你希望在Interface Builder中能看到这个控件对象,那么在定义的时候前面加上IBOutlet,在IB里就能看到这个对象的outlet,如果你希望在Interface Builder里控制某个对象执行某些动作,就在方法前面加上(IBAction)。

 

而这两个东西实际上和void是一样的。

 

5、nil。

Objective-C里的NULL(空)就这么写,表示空指针。

 

6、为什么是@”字符串”而不是”字符串”

 

前面加上@符号,编译器在编译的时候会在程序中给你留出位置,这样才能保证这个字符串不会丢失。反正记住,如果你要想把某些字符串写死在程序里,就要用@”字符串”,如果忘了用@,程序应该会出错。

 

superzhou大侠指正:

6、为什么是@”字符串”而不是”字符串”

”字符串”是C的字符串,@”"是把C的字符串转成NSString的一个简写.
在需要NSString的地方才需要这个转化,例如NSLog里面.
在需要C string的地方,还是用”字符串”的.

另外,@”"这个转换是不支持中文的.例如NSLog(@”字符串”); 是一定输出不了中文的.

 

四、Objective-C 2.0

Objective-C 2.0是Leopard新增加的一门语言,其实和原来的Objective-C是一样的。主要是增加了属性。详细的内容这里不写了,可以参阅Allen Dang的这篇文章,写的很明白。

 

http://blog.codingmylife.com/?p=81

 

五、总结

 

现在来总结一下怎么看Objective-C的代码和怎么开始学Objective-C吧。

 

1、记住Objective-C就是C,不是火星语,这个很关键。

2、记住你自己看不懂不表示脑子迟钝,大部分人第一次看Objective-C的代码可能比你还要迟钝。

3、把CocoaChina.com加入收藏夹,看不明白代码就来再看一遍这篇开宗明义的好文。

4、 文档很关键,当你看不懂某些东西说的是什么的时候,先查Cocoachina,再看英文文档里面的API说明,尤其这个类是以NS开头的时候。再不行就去 google搜,直接把你要查的方法贴进google,通常能找到不少人也在问同样的问题,自然也有热心人活雷锋帮助回答。

5、可以看hello world例子,但是不能总看,看多了真的会晕。另外,千万要放弃苹果官方的Currency Converter货币转换的例子,那个例子是毒药,刚学的时候越看越蒙。

6、学习一门语言最好的方法是先用,和学外语一样,当你会说的时候自然会读。给自己设立一个简单的目标,比如做一个简单的程序,然后一点点解决问题。这样学习起来比只看例子快得多。

 

这是一篇初学者写的文章,希望对同样是初学者的你有一点点帮助:)虽然只是很肤浅的一点点内容,但是应该对你迈入Objective-C的大门有一点帮助。看懂了这篇文章,回过头看Cocoachina的其他文章,你就会觉得很顺眼了。记得天天来哦。

 

另外,这篇Objective-C的参考资料也比较好,如果你有兴趣可以一读。

http://www.otierney.net/objective-c.html.zh-tw.big5


- 作者: 佳佳爸 2010年01月14日, 星期四 11:33  回复(0) |  引用(0) 加入博采

db2常用命令

db2常用命令

IBM DB2上机操作指南
1.启动实例(db2inst1):实例相当于informix中的服务
db2start
2.停止实例(db2inst1):
db2stop
3.列出所有实例(db2inst1)
db2ilist
4.列出当前实例:
db2 get instance
5.察看示例配置文件:
db2 get dbm cfg|more
6.更新数据库管理器参数信息:
db2 update dbm cfg using para_name para_value
7.创建数据库:
db2 create db test
8.察看数据库配置参数信息
db2 get db cfg for test|more
9.更新数据库参数配置信息
db2 update db cfg for test using para_name para_value
10.删除数据库:
db2 drop db test
11.连接数据库
db2 connect to test
12.列出所有表空间的详细信息。
db2 list tablespaces show detail
13.列出容器的信息
db2 list tablespace containers for tbs_id show detail
13.创建表:
db2 ceate table tb1(id integer not null,name char(10))
14.列出所有表
db2 list tables
15.插入数据:
db2 insert into tb1 values(1,’sam’);
db2 insert into tb2 values(2,’smitty’);
16.查询数据:
db2 “select * from tb1”
17.删除数据:
db2 delete from tb1 where id=1
18.创建索引:
db2 create index idx1 on tb1(id);
19.创建视图:
db2 create view view1 as select id from tb1
20.查询视图:
db2 select * from view1
21.节点编目
db2 catalog tcp node node_name remote server_ip server server_port
22.察看端口号
db2 get dbm cfg|grep SVCENAME
23.节点的附接
db2 attach to node_name
24.察看本地节点
db2 list node direcotry
25.节点反编目
db2 uncatalog node node_name
26.数据库编目
db2 catalog db db_name as db_alias at node node_name
27.察看数据库的编目
db2 list db directory
28.连接数据库
db2 connect to db_alias user user_name using user_password
29.数据库反编目
db2 uncatalog db db_alias
30.导出数据
db2 export to myfile of ixf messages msg select * from tb1
31.导入数据
db2 import from myfile of ixf messages msg replace into tb1
32.导出数据库的所有表数据
db2move test export
33.生成数据库的定义
db2look -d db_alias -a -e -m -l -x -f -o db2look.sql
34.创建数据库
db2 create db test1
35.生成定义
db2 -tvf db2look.sql
36.导入数据库所有的数据
db2move db_alias import
37.重组检查
db2 reorgchk
38.重组表tb1
db2 reorg table tb1
39.更新统计信息
db2 runstats on table tb1
40.备份数据库test
db2 backup db test
41.恢复数据库test
db2 restore db test
42. 拥有实例的所有程序列表
db2 list application
43.
db2 terminate
44.查看数据表结构
db2 “describe select * from ggwdxtcs”

/*启动命令界面 */    db2cmd
/*查看帮助*/  db2 ? *
/*连接数据库*/   db2 connect to  user  using
/*查看数据库实例*/ db2ilist
/*启动数据库*/  db2start
/*停止数据库应用*/ db2 force applications all
/*停数据库*/  db2stop
/*查看表空间*  db2 list tablespaces show detail
/*查看表是否有记录*/ db2 select count(*) from
/*从文本导入到数据库表中*/ db2 import from ***.ixf of ixf modified by forcein commitcount 1000 insert into
   
modified by forcein  /*数据库数据在AIX 和 windows 不同版本之间的格式转换*/
      
commitcount **** /*防止数据库提交过多,引起交易日志满,1000-5000 为宜*/
例子:db2 "import from c:\zj\321104\bbsybsj.ixf of ixf modified by forcein insert into bbsybsj"
/*查看sql语句错误解释*/ db2 ? sql**** ****为四位出错编码,不足位前补0

db2 ? “sqlstate”
db2 ? sqlstate=42884
db2 “select * from syscat.functions” |grep –i rtrim
db2 “select * from syscat.indexes”
表增加列
db2 alter table 表名 add column 字段名 varchar(4)(字段类型)
修改表里的字段
db2 update 表名 set 字段名='xxx' where .....

- 作者: 佳佳爸 2009年03月27日, 星期五 11:18  回复(0) |  引用(0) 加入博采

db2中类似truncate的命令
DB2不支持truncate语句,但提供另外二种方法来解决上面的问题。
(1) 在建表时加选项not logged initially ,当清空表时通过alter table [name] activate not logged initially with empty table
(2)首先在操作系统上建一个空文件empty.del,接着通过import命令import from empty.del of del replace into 来清空表中的数据并重组表空间。

- 作者: 佳佳爸 2009年03月24日, 星期二 11:34  回复(0) |  引用(0) 加入博采

DB2中,可以用三种方法来提高并发度
DB2中,可以用三种方法来提高并发度:
  1.降低隔离级, 读操作不会因为锁冲突被拦
  select .... with UR
  2.或,改变加锁的时机,减少锁冲突(这样其行上的insert/update/delete操作不会锁住条件不同select操作)
  db2set DB2_EVALUNCOMMITTED=ON
  db2set DB2_SKIPDELETED=ON
  db2set DB2_SKIPINSERTED=ON
  3.或在where相关字段上加索引,减少锁占用
  注解:
  db2set DB2_EVALUNCOMMITTED=ON - 这个参数将在记录锁之前进行谓词检查,尽量减少锁的时间;
  db2set DB2_SKIPINSERTED=ON - 这个参数将新insert且没有提交的数据跳过;例如,SELECT/UPDATE语句不会发现这条记录;
  db2set DB2_SKIPDELETED=ON - 这个参数将新delete且没有提交的数据跳过;例如,SELECT/UPDATE语句不等待这条记录的提交,并且认为他已经被删除了。

- 作者: 佳佳爸 2009年03月17日, 星期二 15:03  回复(0) |  引用(0) 加入博采

佳佳语录

1.今天佳佳妈说了佳佳两句,

佳佳生气的说:我觉得你肯定不是我亲妈!

佳佳妈晕倒。。。。

2.佳佳妈说:

    告诉你个秘密,你不是我生的!

  佳佳说:

    那我就离家出走。

3. 佳佳翻出冰箱里的雪糕,

   佳佳爸走过来,“给爸爸吃一口!”

   “不行,两个人吃不好,我咳嗽了,会传染给你的!”

4. 常老师看到佳佳脸脏了,说道:“佳佳,你脸脏了,快洗洗去”

  佳佳洗完了,不高兴的对常老师说:“老师,你说脏话”。

5. 佳佳爸去上海出差很长时间了,佳佳不高兴了。

    一天,佳佳说:长大了一定要找个好老公。

            佳佳妈问:啥样的是好老公啊。

            佳佳说:不能去上海的。

6.佳佳考试考了双百,佳佳妈夸佳佳聪明。

   佳佳谦虚的说:主要是你的奶的质量比较好。 

- 作者: 佳佳爸 2007年12月10日, 星期一 21:31  回复(0) |  引用(0) 加入博采

CVS中二进制文件和Text文件忽转
CVS中二进制文件和Text文件忽转
bin->txt
cvs admin -kv filename
然后
cvs update -P -A filename
(但不知道如何去掉显示的-kv的option,默认txt是没有这个显示的)
 
txt->bin
cvs admin -kb filename
然后
cvs update -P -A filename
 
粗浅的认为存放格式没有区别,差别在key word option
 
bin放成txt以后,再改成bin的话,文件需要重新放
 
估计是以为cvs支持$key$的替换,二进制文件某些部分被当作关键字替换掉了

- 作者: 佳佳爸 2007年10月23日, 星期二 16:49  回复(0) |  引用(0) 加入博采

我的两只股票涨停,特此庆祝

我的两只股票涨停,特此庆祝

大唐电信

锌业股份。

等大唐40元就卖,

等锌业30元就卖。

- 作者: 佳佳爸 2007年05月10日, 星期四 22:49  回复(0) |  引用(0) 加入博采

千山归来

- 作者: 佳佳爸 2007年05月7日, 星期一 18:04  回复(0) |  引用(0) 加入博采

野炊烧烤

 烧烤

- 作者: 佳佳爸 2007年05月7日, 星期一 17:45  回复(0) |  引用(0) 加入博采