Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 设置一个实例的成员变量将覆盖另一个实例';s_Objective C_Variable Assignment_Instance Variables - Fatal编程技术网

Objective c 设置一个实例的成员变量将覆盖另一个实例';s

Objective c 设置一个实例的成员变量将覆盖另一个实例';s,objective-c,variable-assignment,instance-variables,Objective C,Variable Assignment,Instance Variables,我有一个关于以下代码的问题。输出错误:frac1应该打印出“2/3”,但它被覆盖为“3/7”。我似乎不明白为什么会被覆盖 #import <Foundation/Foundation.h> // ---- INTERFACE ----- @interface Fraction : NSObject -(void) print; -(void) setNumerator: (int) n; -(void) setDenominator: (int) d; @end //-----

我有一个关于以下代码的问题。输出错误:
frac1
应该打印出“2/3”,但它被覆盖为“3/7”。我似乎不明白为什么会被覆盖

#import <Foundation/Foundation.h>

// ---- INTERFACE -----
@interface Fraction : NSObject
-(void) print;
-(void) setNumerator: (int) n;
-(void) setDenominator: (int) d;
@end


//------implementation section ------
@implementation Fraction
int numerator;
int denominator;


-(void) print{

    NSLog(@"%i/%i", numerator,denominator);
}


-(void) setNumerator:(int)n{

    numerator = n;
}

-(void) setDenominator:(int)d{

    denominator = d;
}

@end


// ---------- EXECUTION--------
int main (int argc, char * argv[])
{
@autoreleasepool {
    Fraction * frac1 = [[Fraction alloc]init];
    Fraction * frac2 = [[Fraction alloc]init];

    [frac1 setNumerator:2];
    [frac1 setDenominator:3];

    // set second fraction
   [frac2 setNumerator:3];
   [frac2 setDenominator:7];


    NSLog(@"this is the value of frac1:");
    [frac1 print];


    NSLog(@"this is the value of frac2:");
    [frac2 print];


}
    return 0;
}
#导入
//----接口-----
@接口分数:NSObject
-(作废)打印;
-(void)集合分子:(int)n;
-(void)集合分母:(int)d;
@结束
//------执行科------
@实现分数
整数分子;
整数分母;
-(作废)打印{
NSLog(@“%i/%i”,分子,分母);
}
-(void)集合分子:(int)n{
分子=n;
}
-(void)集合分母:(int)d{
分母=d;
}
@结束
//-------执行--------
int main(int argc,char*argv[])
{
@自动释放池{
分数*frac1=[[分数分配]初始];
分数*frac2=[[Fraction alloc]init];
[frac1集合分子:2];
[frac1集合分母:3];
//设置第二个分数
[frac2分子:3];
[frac2设定分母:7];
NSLog(@“这是frac1:”的值);
[frac1打印];
NSLog(@“这是frac2的值:”);
[frac2打印];
}
返回0;
}
使用以下代码:

@interface Fraction : NSObject
@property (assign, nonatomic) int numerator;
@property (assign, nonatomic) int denominator;
- (void)print;
@end

@implementation Fraction

- (void)setNumerator:(int)numerator {
   if (_numerator != numerator) {
      _numerator = numerator;
   }
}

- (void)setDenominator:(int)denominator {
   if (_denominator != denominator) {
      _denominator = denominator;
   }
}

-(void) print{
   NSLog(@"%i/%i", _numerator, _denominator);
}

@end
//输出

2015-01-18 18:12:58.844 fraction[29486:2733137] this is the value of frac1:
2015-01-18 18:12:58.845 fraction[29486:2733137] 2/3
2015-01-18 18:12:58.846 fraction[29486:2733137] this is the value of frac2:
2015-01-18 18:12:58.846 fraction[29486:2733137] 3/7
在你的例子中,int分子;整数分母;是全局变量,而不是对象属性。

使用以下代码:

@interface Fraction : NSObject
@property (assign, nonatomic) int numerator;
@property (assign, nonatomic) int denominator;
- (void)print;
@end

@implementation Fraction

- (void)setNumerator:(int)numerator {
   if (_numerator != numerator) {
      _numerator = numerator;
   }
}

- (void)setDenominator:(int)denominator {
   if (_denominator != denominator) {
      _denominator = denominator;
   }
}

-(void) print{
   NSLog(@"%i/%i", _numerator, _denominator);
}

@end
//输出

2015-01-18 18:12:58.844 fraction[29486:2733137] this is the value of frac1:
2015-01-18 18:12:58.845 fraction[29486:2733137] 2/3
2015-01-18 18:12:58.846 fraction[29486:2733137] this is the value of frac2:
2015-01-18 18:12:58.846 fraction[29486:2733137] 3/7

在你的例子中,int分子;整数分母;是全局变量,而不是对象属性。

问题在于
分子和
分母被设置为全局变量,而不是实例变量。为了使实例变量成为@implementation定义的一部分,将它们括在{}中

固定的:

@implementation Fraction {
int numerator;
int denominator;
}
输出:

这是frac1的值:
2/3
这是frac2的值:
3/7


问题是
分子
分母
被设置为全局变量,而不是实例变量。为了使实例变量成为@implementation定义的一部分,将它们括在{}中

固定的:

@implementation Fraction {
int numerator;
int denominator;
}
输出:

这是frac1的值:
2/3
这是frac2的值:
3/7


+1 OP缺少的关键信息是这里的最后一行,即他们无意中使用了全局变量,而不是他们假设的实例变量/属性。虽然这样做很有效,但作为一个答案,这是过分的,唯一的问题是缺少{}。此外,OP可能不希望
分子
分母
公开。+1 OP缺少的关键信息是这里的最后一行,即他们无意中使用了全局变量,而不是他们假设的实例变量/属性。虽然这样做有效,但作为一个答案,这是过分的,唯一的问题是缺少{}。此外,OP可能不希望
分子
分母
公开。