黑马程序员——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关键字修饰
- 调用的方法必须要实现 (很重要)
- 成员变量要写在{}里,但是方法不能写在{}里
- 方法不能像函数那样直接调用
对象可以作为方法的参数,也可以作为方法的返回值,示例代码如下:
#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包含相应的头文件。
- 黑马程序员——OC基础语法
- 黑马程序员——OC基础语法
- 黑马程序员——oc基础语法
- 黑马程序员——OC学习——基础语法二
- 黑马程序员——OC基础---OC特有语法
- 黑马程序员—OC语言基础—基础语法知识
- 黑马程序员———OC基础语法(二)---三大特性
- 黑马程序员———OC基础语法(六)---内存管理(二)
- 黑马程序员--Objective-C——OC特有语法二
- 黑马程序员——OC基础@property语法详解
- 黑马程序员——OC基础---面向对象语法
- 黑马程序员——OC基础语法----类、对象、方法
- 黑马程序员——OC语言基础篇---核心语法
- 黑马程序员—OC语言基础—核心语法小结
- 黑马程序员——OC基础---语法一
- 黑马程序员——OC基础语法笔记和习题
- 黑马程序员——OC基础之点语法
- 黑马程序员——OC学习——基础语法一
- time_expire时间过短,刷卡至少1分钟,其他5分钟
- Spring-Mock--用于Spring 的单元测试
- PHP中的SQL优化
- 蓝桥 入门训练 Fibonacci数列
- 北上广不相信眼泪——读工业4.0时代有感
- 黑马程序员——OC学习——基础语法二
- 强制弹出系统键盘(禁用搜狗键盘)
- 倒计时获取验证码 runOnUiThread Timer TimerTask
- Device could not be initialized or no devices found
- [LeetCode]Easy合集I
- Java 8 vs. Scala(一): Lambda表达式
- RecyclerView的通用适配器,和滚动时不加载图片的封装
- 无法购买服务产品
- 浅谈3D Touch(1) -- Home screen quick action