您的位置:首页 > 职场人生

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

2015-11-30 13:14 423 查看
------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;
}

@end
int 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;
}
@end

int 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包含相应的头文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: