我的OC练习(二):创建类的小“意外”

来源:互联网 发布:linux exec() 编辑:程序博客网 时间:2024/04/29 10:45
刚刚进行多文件练习的时候发生了一个有意思的“意外”。

我用cocoa类自动创建了一对文件Goods.h和Goods.m,然后我误将Goods.m看成了Goods.h,在@implementation里进行了实例变量的定义。如下:

#import "Goods.h"@implementation Goods{    //实例变量    int _gid;    NSString * _name;}//set方法-(void)setName:(NSString*)name{    _name=name;}-(void)setGid:(int)gid{       _gid=gid;}//get方法-(NSString*)name{    return _name;}-(int)gid{    return _gid;}@end

/*非规范代码,请勿模仿*/

然后我意识到错误的时候发现,xcode的预编译竟然没有报错!会不会这么写也可以?于是我做了一次尝试。我在头文件的@interface中仅申明了对象方法,代码如下:

#import <Foundation/Foundation.h>@interface Goods : NSObject-(void)setName:(NSString*)name;-(void)setGid:(int)gid;-(NSString*)name;-(int)gid;@end


然后在main函数里尝试通过调用set和get方法,看看是否可以对我在@implementation中申明的实例变量进行,也就是说我想看看我定义在@implementation里的东西是不是能和定义在@interface里定义的一样有效果。于是我写了如下代码:

#import <Foundation/Foundation.h>#import "Goods.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        // insert code here...        Goods * test=[Goods new];       //创建对象        [test setName:@"goods1"];        [test setGid:100];        NSLog(@"%@",[test name]);        NSLog(@"%d",[test gid]);            }    return 0;}
编译运行没有报错,同时输出也是预想的结果:



所以我在@implementation里定义的实例变量是确实发挥着作用的。
这虽然是一种不规范的代码格式,但由此却提出一个问题,@interface和@implementation的作用与界限究竟是什么。看来还需要更深刻的理解和学习。



0 0
原创粉丝点击