Objective - C基础: 第一天 - 9.常见错误
来源:互联网 发布:学java能做游戏吗 编辑:程序博客网 时间:2024/05/16 00:27
前面我们简单的介绍了方法和函数的混编, 这次我们来讲解一些注意事项:
首先我们来看一个例子:
#import <Foundation/Foundation.h>@interface Proson : NSObject{ int age;}- (void)walk;@end@implementation Proson- (void)walk{ NSLog(@"人在走路");}@endint main(){ Proson *p = [Proson new]; [p walk]; return 0;}
我们都知道这是规范的写法, 但有一些没有经验的人或许会犯以下的错误:
1. @end配套错误
#import <Foundation/Foundation.h>@interface Proson : NSObject@implementation Proson@end@endint main(){ return 0;}
我们都知道代码是从上往下执行的, 那么从@interface开始, 找到第一个@end就结束了, 而@implementation在它们之间, 也会被结束掉, 但是它没有找到对应的@end, 所以编译器会报错.
2.方法声明和方法实现位置调换
#import <Foundation/Foundation.h>@interface Proson : NSObject- (void)test{ }@end@implementation Proson- (void) test;@endint main(){ return 0;}
这里要特别强调一样@interface里是用来声明方法和成员变量的, 不是用来实现方法的, 所以一定要切记不要反过来了.
3.在声明成员变量的时候赋值
#import <Foundation/Foundation.h>@interface Proson : NSObject{ int age = 20;}@end@implementation Proson@endint main(){ return 0;}
在OC中, 不能直接在@interface赋值, 与C语言不一样, 在OC中赋值需要有一个对象才可以给间接给成员变量赋值, 否则就会报错.
4.不能在@interface里使用static
#import <Foundation/Foundation.h>@interface Proson : NSObject{ static int age;}@end@implementation Proson@endint main(){ return 0;}
在OC中虽然是可以使用static这个关键字, 但不能在@interface里面使用.
5.错误声明/实现方法
#import <Foundation/Foundation.h>@interface Proson : NSObject(void)tset;@end@implementation Proson(void)test{ }@endint main(){ return 0;}
在OC中, 如果要声明/实现方法, 必须得在方法名前加上" - "符号, 否则编译器会报错.
补充一些知识:
1.函数可以在文件任何地方定义(main()函数之后除外)
#import <Foundation/Foundation.h>void test(){ }@interface Proson : NSObjectvoid test2(){ }@endvoid test3(){ }@implementation Prosonvoid test4(){ }@endint main(){ return 0;}
这样子编译是没有问题的~~
2.一个文件里面可以又多个@interface @end和多个@implementation @end
#import <Foundation/Foundation.h>@interface Proson : NSObject@end@implementation Proson@end@interface Car : NSObject@end@implementation Car@endint main(){ return 0;}
这样子写也是没有问题, 但是类名不能相同.
下面来总结一下:
方法
1.对象方法都是以减号 -
2.对象方法的声明必须写在@interface和@end之间, 对象方法的实现必须写在@implementation和@end之间
3.对象方法只能由对象来调用
4.对象方法归类\对象所有
函数
1.函数能写在文件中的任意位置(main()函数之后除外),函数归文件所有
2.函数调用不依赖于对象
3.函数内部不能直接通过成员变量名访问某个对象的成员变量
好了, 这次我们就讲到这里, 下次我们继续~~
0 0
- Objective - C基础: 第一天 - 9.常见错误
- Objective-C 第一天
- Objective-C 第一天
- Objective - C基础: 第一天 - 3.BOOL基本认识
- Objective - C基础: 第一天 - 5.对象和类
- Objective - C基础: 第一天 - 8.OC对象与函数
- Objective - C基础: 第一天 - 12.方法练习
- Objective-C学习第一天
- 初学Objective - C 第一天
- 第一天(c基础)
- Objective - C基础: 第一天 - 1. 第1, 2个OC程序
- 学习Objective-C--第一天
- Objective-C语法学习 第一天
- 学习Objective-C--第一天
- Objective-C Runtime入院第一天
- Objective - C基础: 第一天 - 4.面向过程和面向对象思想
- Objective - C基础: 第一天 - 6.第一个OC类练习
- Objective - C基础: 第一天 - 7.第二个OC类练习
- List添加多个同名map时的一个注意事项
- liunx命令
- 一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值
- C++实现md5加密或计算文件的唯一性识别
- IOS学习之——地图2 跟踪用户位置变化
- Objective - C基础: 第一天 - 9.常见错误
- 一、 编译Live555
- HDU-2519-新生晚会
- JBuilder快捷键整理
- Windows Phone 8.1 驱动开发——如何调用ACPI Method
- 改造vim变成source insight
- Running Android L Developer Preview on 64-bit ARM QEMU
- Python脚本报错AttributeError: ‘module’ object has no attribute’xxx’解决方法
- 应用maven/hudson实施jmeter性能自动化