黑马程序员——OC学习——基础语法二

来源:互联网 发布:重庆长寿行知学校 编辑:程序博客网 时间:2024/06/06 04:57

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1. OC中方法的声明调用

方法分类(和C语言相同)有4种:

  • 无参无返回值
  • 无参有返回值
  • 有参无返回值
  • 有参有返回值

无参对象方法的声明

对象方法:-(返回值类型)方法名;


有参对象方法声明

-(返回值类型)方法名:(参数类型)参数名        //一个参数的方法

 -(返回值类型)方法名:(参数类型)参数名1 and (参数类型)参数名2          //有2个参数的方法

注意:冒号也是方法名的一部分

方法调用

对象方法调用格式:[对象名 对象方法];

方法调用格式:[类名 类方法];

下面给出有返回值的示例代码:

#import <Foundation/Foundation.h>@interface Caculator:NSObject@property int _num1;@property int _num2;//无参有返回值方法的声明-(int)sum;//有参有返回值方法的声明-(int)sum:(int)x andY:(int)y;@end@implementation Caculator//无参有返回值方法的实现-(int)sum{    return __num1+__num2;}//有参有返回值方法的实现-(int)sum:(int)x andY:(int)y{    return x+y;}@endint main(int argc, const char * argv[]) {    @autoreleasepool {        //创建一个Caculator的实例对象ca        Caculator *ca=[Caculator new];        //调用无参有返回值的方法        int sum1= [ca sum];        //调用有参有返回值的方法        int sum2=[ca sum:5 andY:10];        NSLog(@"sum1=%d,sum2=%d",sum1,sum2);            }    return 0;}

2.对象存储细节

类创建对象,每个对象在内存中都占有一定的存储空间。比如一个Person类创建一个p对象如下:

Person *p=[Person new];

创建对象p的时候申请的空间在内存堆区,实例变量保存在内存堆区,但指针变量p保存在栈区,对象方法保存在代码区。

指针变量p调用方法的过程:首先找到指针变量p中存放的堆区空间首地址,再找到_isa指针,然后找到_isa指向的代码区空间,在空间中找到对应的方法

一个类可以创建多个对象,类在代码区只会加载一次。

3. #prama mark指令

功能:对代码进行分组,方便代码查找导航

eg: 

#pragma mark Car类的声明@interface Car : NSObject-(void)run;@end
#pragma mark Caculator类的声明@interface Caculator : NSObject-(int)sum;@end

4. 函数和对象方法的区别

对象方法:

  • 对象方法的实现只能写在@implementation @end之间,对象方法的实现只能写在@interface @end之间
  • 对象方法以—开头,只能由对象调用
  • 对象方法归对象所有
函数:

  • 函数属于整个文件,可以写在文件的任何位置,包括@implementation @end之间,但写在@interface @end之间无法识别
  • 函数中不可以访问对象的实例变量
  • 函数是平行关系
  • 函数使用的时候可以直接调用
常见错误汇总有以下几个:

  • 类的声明和实现要成对出现,缺一不可
  • 声明和实现不能嵌套包含
  • 声明和实现的顺序可以打乱但是实现必须在声明之后
  • 声明时不能对成员变量初始化
  • 成员变量和方法不能用static关键字修饰
  • 调用的方法必须要实现 (很重要)
  • 成员变量要写在{}里,但是方法不能写在{}里
  • 方法不能像函数那样直接调用
5. 对象和方法之间的关系

对象可以作为方法的参数,也可以作为方法的返回值,示例代码如下:

#import <Foundation/Foundation.h>@interface Person:NSObject{    @public    NSString *_name;    int _age;}//对象作为方法的参数-(void)disPerson:(Person*)person;//对象作为方法的返回值-(Person*)changeAge:(Person*)person;@end@implementation Person//对象作为方法的参数-(void)disPerson:(Person*)person{    //打印出传入对象的信息    NSLog(@"姓名=%@,年龄=%d",_name,_age);    }//对象作为方法的返回值-(Person *)changeAge:(Person*)person{    //修改传入对象的年龄    person->_age=18;    //把对象返回    return person;}@endint main(int argc, const char * argv[]) {    @autoreleasepool {        Person *p=[Person new];        p->_name=@"张三";        p->_age=20;        //显示为传入对象的信息        [p disPerson:p];        //修改传入对象的年龄       Person *p1=[p changeAge:p];        [p1 disPerson:p1];    }    return 0;}


6. OC多文件开发

使用多文件:通常把不同的类放到不同的文件中,每个类的声明和实现分开,声明写在.h文件中,实现写在.m文件中,文件名的前缀和类名保持相同。

在主函数及类的实现文件中要使用import包含相应的头文件。

0 0
原创粉丝点击