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

刚刚进行多文件练习的时候发生了一个有意思的“意外”。

我用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的作用与界限究竟是什么。看来还需要更深刻的理解和学习。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值