通过运行另一个对象的方法来帮助返回值的方法

时间:2010-06-26 19:00:55

标签: objective-c cocoa xcode scope nsnumber

我有一个运行以下方法的类(一个getter):

// the interface
@interface MyClass : NSObject{
    NSNumber *myFloatValue;
}

- (double)myFloatValue;
- (void)setMyFloatValue:(float)floatInput;

@end

// the implementation
@implementation
- (MyClass *)init{
    if (self = [super init]){
        myFloatValue = [[NSNumber alloc] initWithFloat:3.14];
    }
    return self;
}

// I understand that NSNumbers are non-mutable objects and can't be
// used like variables.     
// Hence I decided to make make the getter's implementation like this
- (double)myFloatValue{
    return [myFloatValue floatValue];
}
- (void)setMyFloatValue:(float)floatInput{
    if ([self myFloatValue] != floatInput){
        [myFloatValue release];
        myFloatValue = [[NSNumber alloc] initWithFloat:floatInput;
  }

@end

在调试期间将鼠标悬停在myFloatValue对象上时,它不包含值。相反,它说:“超出范围”。

我希望能够在不使用@property,使用除NSNumbers之外的其他内容或其他重大更改的情况下完成此工作,因为我只想先了解这些概念。最重要的是,我想知道我显然犯了什么错误。

2 个答案:

答案 0 :(得分:0)

我可以看到几个错误:

@implementation行应为@implementation MyClass

函数setMyFloatValue缺少结束]} - 应该读取:

- (void)setMyFloatValue:(float)floatInput{
    if ([self myFloatValue] != floatInput){
        [myFloatValue release];
        myFloatValue = [[NSNumber alloc] initWithFloat:floatInput];
    }
}

我刚刚在Xcode中对它进行了测试,它适用于我这些变化。

答案 1 :(得分:0)

为什么不在接口中设置属性并在实现中合成访问器?

@interface MyClass : NSObject {
  float *myFloat
}

@property (assign) float myFloat;

@end

@implementation MyClass

@synthesize myFloat;

@end