objective-c学习笔记

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):是使借口能够正常工作的代码。


第四章 继承
继承:
子类包括父类的所有功能。
UML:
 Unified Modeling Language 统一建模语言,是一种用图表来表示类、类的哪痛以及它们之间关系的常见方式。
继承的语法格式:
objective-c只允许单个继承。
 @interface 子类名 : 父类名
书上的例子就是利用shape类作为circle,egg,rectangle以及triangle的父类,让这四类同时具有其共同的特性,但是在draw函数时又分别在子类下面定义。
如下为让circle类继承shape类的具体代码(记住要先interface之后implantation才可以):

@interface Shape : NSObject

{

    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 方法名:变量]


第五章 复合
1、定义
将多个组件组合在一起配合使用,从而得到完整的作品。
2、在objective-c中复合的实现是通过包含作为实例变量的对象指针实现的。

例如我要复合一个Computer,我需要mouse、screen、keyboard以及core。那么我得到的这个虚拟的computer如下:
@interface Computer : NSObject
{
Mouse: *mouse;
Screen: *screen;
Keyboard: *keyboard;
Core: *core;
  }@end //Computer

3、存取方法
定义:是用来读取或者改变某个对象属性的方法。
分类:setter方法:为对象中的变量赋值。
 getter方法:为代码提供了通过对象自身访问对象属性的方式。
 mutator方法:用来更改对象状态。
命名:
setter方法根据他所更改的属性的名称来命名,并在其钱买你加上set。
getter方法则是以返回的属性名称命名。
4、继承和复合
继承  is a   是一个
复合 has a 有一个



第六章 源文件组织

os:奶奶的学了这么多年编程,终于学到这个了!

1、拆分接口和实现
头文件(.h):接口
实现文件(.m):实现

导入头文件的两种方法:< >以及“ ”
< >用于导入系统头文件,只对于项目只读。
“ ”项目本地的头文件,可编译。

2、跨文件依赖关系
重新编译须知:
@class:
他创建了一个前向引用。
循环依赖关系中也有相应的作用 例如要A类使用B类,则在A类中的A.h.使用@class  B ,在B.h中使用@class B,这两个类就可以互相引用了。
ps:继承自其他类而不是通过指针指向其他类的不能用@class。




ps:这部分内容仅仅是书上的笔记。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值