黑马程序员——OC学习——基础语法二
2015-11-30 13:14
423 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1. OC中方法的声明调用
方法分类(和C语言相同)有4种:
无参无返回值
无参有返回值
有参无返回值
有参有返回值
无参对象方法的声明
对象方法:-(返回值类型)方法名;
有参对象方法声明
-(返回值类型)方法名:(参数类型)参数名 //一个参数的方法
-(返回值类型)方法名:(参数类型)参数名1 and (参数类型)参数名2 //有2个参数的方法
注意:冒号也是方法名的一部分
方法调用
对象方法调用格式:[对象名 对象方法];
类方法调用格式:[类名 类方法];
下面给出有返回值的示例代码:
2.对象存储细节
类创建对象,每个对象在内存中都占有一定的存储空间。比如一个Person类创建一个p对象如下:
Person *p=[Person new];
创建对象p的时候申请的空间在内存堆区,实例变量保存在内存堆区,但指针变量p保存在栈区,对象方法保存在代码区。
指针变量p调用方法的过程:首先找到指针变量p中存放的堆区空间首地址,再找到_isa指针,然后找到_isa指向的代码区空间,在空间中找到对应的方法
一个类可以创建多个对象,类在代码区只会加载一次。
3. #prama mark指令
功能:对代码进行分组,方便代码查找导航
eg:
4. 函数和对象方法的区别
对象方法:
对象方法的实现只能写在@implementation @end之间,对象方法的实现只能写在@interface @end之间
对象方法以—开头,只能由对象调用
对象方法归对象所有
函数:
函数属于整个文件,可以写在文件的任何位置,包括@implementation @end之间,但写在@interface @end之间无法识别
函数中不可以访问对象的实例变量
函数是平行关系
函数使用的时候可以直接调用
常见错误汇总有以下几个:
类的声明和实现要成对出现,缺一不可
声明和实现不能嵌套包含
声明和实现的顺序可以打乱但是实现必须在声明之后
声明时不能对成员变量初始化
成员变量和方法不能用static关键字修饰
调用的方法必须要实现 (很重要)
成员变量要写在{}里,但是方法不能写在{}里
方法不能像函数那样直接调用
5. 对象和方法之间的关系
对象可以作为方法的参数,也可以作为方法的返回值,示例代码如下:
6. OC多文件开发
使用多文件:通常把不同的类放到不同的文件中,每个类的声明和实现分开,声明写在.h文件中,实现写在.m文件中,文件名的前缀和类名保持相同。
在主函数及类的实现文件中要使用import包含相应的头文件。
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包含相应的头文件。
相关文章推荐
- JAVA面试题整理
- 嵌入式C编程经典面试题
- 漫谈程序员(九)版本命名规范
- 漫谈程序员(九)版本命名规范
- 黑马程序员——OC学习——基础语法一
- “中文编程”是否所谓解决中国程序员编程效率的“银弹”的讨论
- 培训机构毕业的程序员被歧视的背后逻辑
- (常面试的面试题)Service的两种启动方式的区别?
- 程序员的工作汇报与总结方法
- 程序员如何平衡工作与生活
- Android 面试题(答案最全)
- 创业失败那天我在做什么
- 中、美、印、日四国程序员大比拼
- 黑马程序员——javaSE_正则表达式
- Android面试总结(一)
- 黑马程序员——面向对象的总结复习
- 黑马程序员——OCFoundation框架部分知识总结
- 黑马程序员——关于单例模式的多种写法
- 程序员的思考
- 程序员瞎扯,扯得很有道理