1.如何高效使用xcode http://www.cocoachina.com/ios/20140731/9284.html
2.间接的意思:就是利用变量或者方便修改的对象来实现程序的可修改性和灵活性。
3.书中第二、三章的例程 有的自己小小的修改了一下
(1)没有任何难度的关于bool的说明,objective-c中的yes只能是整型1而不能是任何非零数,这和c中的bool值有一点区别。
#import <Foundation/Foundation.h>
BOOL areIntsDifferent(int thing1, int thing2) //return NO if the two numbers are equal ,else return Yes
{
if(thing1 == thing2 )return NO;
else return YES;
}
NSString *boolString (BOOL yesNo)
{
if(yesNo == NO) return (@"NO");
else return (@"YES");
}
int main(int argc,const char *argv[])
{
BOOL areTheyDifferent;
int m, n;
scanf("%d %d",&m,&n);
areTheyDifferent = areIntsDifferent(m ,n );
NSLog(@"are %d and %d different? %@",m,n,boolString(areTheyDifferent));
return 0;
}
(2)下面一个程序在编写的时候顺便复习和学习了一下linux下的命令
这里有用到的命令:
touch 文件名:创建一个文件;
cd ./xxx/xxx:当前目录的某文件夹或文件;
mv a b:将文件或文件夹a拷贝到b处;
pwd:当前路径
ls -l :当前路径下的所有文件的读写权限
设置xcode中的我们所需要的环境变量:product->scheme->edit scheme 在run选项卡里选择argument 在argument中添加所需变量路径
程序如下:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
if (argc==1){
NSLog(@"You need input the name of file.");return (1);}//if
FILE *wordFile = fopen(argv[1], "r");
char word[100];
while (fgets(word, 100, wordFile)){
NSLog(@"%s is %lu characters long", word, strlen(word)-2);
}//while
fclose(wordFile);
return (0);
}//main
该程序已经很简洁了 并且能够很方便的实现对某个文件的打开工作 不过环境变量argv是在程序运行之前就被指定好的 我能否在程序运行时 给其指定一个路径让其访问该路径指向的文件呢 所以我想用一个数组buffer来存储我想要访问的路径 并且在无法找到该路径时报错 所以我就修改了一下书上的程序 有了以下的程序 很简单 但是编译出来成功还是很开心的
#import <Foundation/foundation.h>
#define N 25588
int main(int argc, const char *argv[]){
char buffer[N];<span style="white-space:pre"> </span>//定义buffer数组存储路径
NSLog(@"Please input the addr:");
scanf("%s",buffer);
FILE *wordlist = fopen(buffer, "r");
NSLog(@"Now I am open the file : %s",buffer);
if(!wordlist) NSLog(@"Wrong route!");<span style="white-space:pre"> </span>//报错
else {
NSLog(@"Please press the enter.");
getchar();<span style="white-space:pre"> </span>//为了防止程序跳太快,输入任意键在进行之后的程序
char word[100];
while(fgets(word, 100, wordlist)){
NSLog(@"%s is %lu characters long", word, strlen(word)-2);
}//while
}//else
fclose(wordlist);
return 0;
}//main
书上举这个例子就是告诉我们,能够通过文件系统更加直接且方便的实现对程序的修改 增加了程序的适用性 让他可以用于更多的 场景和情形 同时 利用文件系统也使得读者更好的理解间接的意义
(3)对象,类,实例,消息,方法,方法调度,接口,实现
类(class):是一种表示对象类型的结构体。
对象(object):是一种包含值和指向其类的隐藏指针的结构体。
实例(instance):是对象的一种称呼。实际的对象。
消息(message):是对象可以执行的操作。
方法(method):为响应消息而运行的代码。
方法调度(method dispatcher):用于推测执行什么方法响应某个特定的消息。
接口(interface):类为对象提供的特性描述。
实现(implementation):是使借口能够正常工作的代码。
{
ShapeColor fillColor;
ShapeRect bounds;
}
- (void) setFillColor: (ShapeColor) fillColor;
- (void) setBounds: (ShapeRect) bounds;
- (void) draw;
@end // Shape
@implementation Shape
- (void) setFillColor: (ShapeColor) c
{
fillColor = c;
} // setFillColor
- (void) setBounds: (ShapeRect) b
{
bounds = b;
} // setBounds
- (void) draw
{
}
@end// draw
@interface Circle : Shape
@end
@implementation Circle
-(void) draw
{
NSLog(@"drawing rect at (%d %d %d %d) in %@",
bounds.x, bounds.y,
bounds.width,bounds.height,
colorName(fillColor));
}
@end
有关术语:
超类:
是继承的类。
父类:
时超累的另一种表达方式。
子类:
是执行继承的类。
孩子类:
是子类的一种表达方式。
如果想改变方法的实现,需要重写继承的方法。
例如上述例子中,circle类中重写了draw方法。
继承的工作机制:
1、方法调度
当代码发送消息时,此机制将在当前类中搜索相应的方法,如果无法在接受消息的当前类中找到方法,则在超类中查找。
2、实例变量
在创建一个新类时,其对象首先会从他的超类继承实例变量,然后根据自身情况添加自己的实例变量。
3、重写方法
super关键字:既可以重写方法的实现,又能调用超类中的实现方式。当需要超类实现自身的功能,同时在之前或者之后执行某些额外的工作室,这种机制非常有用。为了调用继承的方法在父类中的实现,需要使用super当作方法调用的目标。
当你向super发送消息时,实际上是在请求objective-c向该类的超类发送消息,如果超类中没有定义该消息,则继续向继承链的上一级中寻找。
格式:[super 方法名:变量]
第六章 源文件组织
ps:这部分内容仅仅是书上的笔记。