1、Cocoa的组成
苹果公司将Cocoa、Carbon、QuickTime和OpenGL等技术作为框架集提供
Cocoa组成部分有:
Foundation框架(有很多有用的,面向数据的低级类和数据结构)
Application Kit(也称AppKit)框架(包含了所有的用户接口对象和高级类,例如NS……)
,还有一个支持框架的套件,包括Core Animation和Core Image。
2、NSLog相当于printf()
NSLog(@"hello Objective-C");
//注:@是Objective-C在标准C语言基础上添加的特征之一,双引号的字符串前面有一个@,这表示引用的字符串应该作为Cocoa的NSString元素处理
NSLog(@"are %d and %d different? %@",5,5,boolString(areTheyDifferent));
//注意%@:使用NSLog输出任何对象值时,都会使用这个格式说明
3、BOOL使用8位存储,YES定义为1,NO定义为0,大于1不为YES,跟标准C不同。
若不小心将一个长于1字节的整型值赋给BOOL,则只截取低八位
Obejective-C中1不等于1,绝对不要将BOOL值和YES比较
二:面向对象的Objective-C
4、使用间接从本地读取文件的例子
#import <Foundation/Foundation.h>
int main(int argc,const char * argv[])
{
if(argc == 1){
NSLog(@"you need to provide a file name");
return (1);
}
FILE *wordFile = fopen(argv[1] , "r");
char word[100];
while (fgets(word,100,wordFile)){
//fget调用会保留分开每一行的换行符,我们不需要,把它替换为0,表示字符串的结束
word[strlen(word)-1] ='\0';
NSLog(@"%s is %d characters long",word,strlen(word));
}
//运行用 ./Word-Length-4 /tmp/words.txt
若给了文件路径,那么argc会大于1,然后我们可以查询argv数组得到文件路径。argv[1]保存着用户提供的文件名,argv[0]保存着程序名。
在XCode中编译此程序需要在XCode文件列表中展开Executables,双击程序名,在Arguments区域中添加启动参数
5、id
id是一种泛型,用于表示任何类的对象,id实际上是一个指针,指向其中的某个结构
6、[]
例[shape draw]
第一项是对象名,其余部分是要执行的操作
7、Objective-C的OOP范例
1)@interface部分(一般都作为.h单独书写,声明部分)
@interface Circle:NSObject //说明这是为Circle的新类定义的接口
{
ShapeColor fillColor;
ShapeRect bounds;
}
//括号内的是Circle对象需要的各种数据成员
- (void) setFilColor:(ShapeColor) fillColor;
//先行短线表明“这是新方法的声明”如果是“+”则表示是类方法,也称工厂方法
- (void) setBounds:(ShapeRect) bounds;
- (void) draw;
@end
//Circle
2 )@implementation部分(一般写为.m文件,实现部分)
@implementation Circle //@implementation是一个编译器指令,表明你将为某个类提供代码
- (void) setFillColor:(ShapeColor) c
//在这里如果继续使用参数名fillColor,就会隐藏fillColor实例变量,并且有警告
//我们已经定义了一个名为fillColor的实例变量,可以在该方法中引用该变量,如果使用相同的另一个变量,那么前一个会屏蔽
{
fillColor = c;
}
- (void) setBounds:(ShapeRect) b
{
bounds = b;
}
- (void) draw
{
NSLog("^^^")
}
@end //Circle
可以在@implementation中定义那些在@interface中无相应声明的方法,可以把他们看做是石油方法,仅在类的实现中使用。
注:Objective-C不存在真正的私有方法,从而禁止其他代码调用它。这是Objective-C动态本质的副作用。
苹果公司将Cocoa、Carbon、QuickTime和OpenGL等技术作为框架集提供
Cocoa组成部分有:
Foundation框架(有很多有用的,面向数据的低级类和数据结构)
Application Kit(也称AppKit)框架(包含了所有的用户接口对象和高级类,例如NS……)
,还有一个支持框架的套件,包括Core Animation和Core Image。
2、NSLog相当于printf()
NSLog(@"hello Objective-C");
//注:@是Objective-C在标准C语言基础上添加的特征之一,双引号的字符串前面有一个@,这表示引用的字符串应该作为Cocoa的NSString元素处理
NSLog(@"are %d and %d different? %@",5,5,boolString(areTheyDifferent));
//注意%@:使用NSLog输出任何对象值时,都会使用这个格式说明
3、BOOL使用8位存储,YES定义为1,NO定义为0,大于1不为YES,跟标准C不同。
若不小心将一个长于1字节的整型值赋给BOOL,则只截取低八位
Obejective-C中1不等于1,绝对不要将BOOL值和YES比较
二:面向对象的Objective-C
4、使用间接从本地读取文件的例子
#import <Foundation/Foundation.h>
int main(int argc,const char * argv[])
{
if(argc == 1){
NSLog(@"you need to provide a file name");
return (1);
}
FILE *wordFile = fopen(argv[1] , "r");
char word[100];
while (fgets(word,100,wordFile)){
//fget调用会保留分开每一行的换行符,我们不需要,把它替换为0,表示字符串的结束
word[strlen(word)-1] ='\0';
NSLog(@"%s is %d characters long",word,strlen(word));
}
//运行用 ./Word-Length-4 /tmp/words.txt
若给了文件路径,那么argc会大于1,然后我们可以查询argv数组得到文件路径。argv[1]保存着用户提供的文件名,argv[0]保存着程序名。
在XCode中编译此程序需要在XCode文件列表中展开Executables,双击程序名,在Arguments区域中添加启动参数
5、id
id是一种泛型,用于表示任何类的对象,id实际上是一个指针,指向其中的某个结构
6、[]
例[shape draw]
第一项是对象名,其余部分是要执行的操作
7、Objective-C的OOP范例
1)@interface部分(一般都作为.h单独书写,声明部分)
@interface Circle:NSObject
{
ShapeColor fillColor;
ShapeRect bounds;
}
- (void) setFilColor:(ShapeColor) fillColor;
- (void) setBounds:(ShapeRect) bounds;
- (void) draw;
@end
2 )@implementation部分(一般写为.m文件,实现部分)
@implementation Circle
- (void) setFillColor:(ShapeColor) c
//我们已经定义了一个名为fillColor的实例变量,可以在该方法中引用该变量,如果使用相同的另一个变量,那么前一个会屏蔽
{
fillColor = c;
}
- (void) setBounds:(ShapeRect) b
{
bounds = b;
}
- (void) draw
{
NSLog("^^^")
}
@end //Circle
可以在@implementation中定义那些在@interface中无相应声明的方法,可以把他们看做是石油方法,仅在类的实现中使用。
注:Objective-C不存在真正的私有方法,从而禁止其他代码调用它。这是Objective-C动态本质的副作用。