Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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 覆盖访问器getter方法的最简单方法?_Objective C_Xcode4.2 - Fatal编程技术网

Objective c 覆盖访问器getter方法的最简单方法?

Objective c 覆盖访问器getter方法的最简单方法?,objective-c,xcode4.2,Objective C,Xcode4.2,考虑以下代码: // MyClass.h @interface MyClass @property NSInteger Value; @end //MyClass.m @implementation MyClass @synthesize Value; @end 如果我只想覆盖值的合成setter方法,我需要进行哪些最小的代码修改 接下来,为了只覆盖合成的getter方法,我需要做哪些最小的修改 编辑 重写很简单。(参见下面的答案)在我的例子中,我收到了一个严重的警告,因为我

考虑以下代码:

// MyClass.h
@interface MyClass
    @property NSInteger Value;
@end

//MyClass.m
@implementation MyClass
    @synthesize Value;
@end
如果我只想覆盖
值的合成setter方法,我需要进行哪些最小的代码修改

接下来,为了只覆盖合成的getter方法,我需要做哪些最小的修改

编辑


重写很简单。(参见下面的答案)在我的例子中,我收到了一个严重的警告,因为我没有在属性定义中包含
非原子属性。添加属性解决了导致此问题的最初问题。

显然,不可能只覆盖原子属性的一个或另一个。必须将其更改为具有
非原子属性

@property (nonatomic) NSInteger value;
五分钟前我还不知道,就我所能看到的任何地方都没有注意到

同时将名称更改为小写。ObjC中的约定适用于IVAR的较低首字母

除此之外,只要实现您想要的任何一个,编译器就会完成其余的工作。您可以有效地覆盖none、one或两者

只是一个获得者:

@implementation MyClass

@synthesize value;

- (NSInteger) value {
    return value;
}

@end
只有二传手:

@implementation MyClass

@synthesize value;

- (void) setValue: (NSInteger)newValue {
    value = newValue;
}

@end

对象类型(和覆盖原子性)的方法只是稍微复杂一些;这里有几个问题可以解释。

显然,不可能只覆盖原子属性的一个或另一个。必须将其更改为具有
非原子属性

@property (nonatomic) NSInteger value;
五分钟前我还不知道,就我所能看到的任何地方都没有注意到

同时将名称更改为小写。ObjC中的约定适用于IVAR的较低首字母

除此之外,只要实现您想要的任何一个,编译器就会完成其余的工作。您可以有效地覆盖none、one或两者

只是一个获得者:

@implementation MyClass

@synthesize value;

- (NSInteger) value {
    return value;
}

@end
只有二传手:

@implementation MyClass

@synthesize value;

- (void) setValue: (NSInteger)newValue {
    value = newValue;
}

@end

对象类型(和覆盖原子性)的方法只是稍微复杂一些;这里有几个问题可以解释。

保持上面的一切不变(除了将
值更改为
值以标准化),然后您可以实现以下一项或两项:

-(NSInteger)value
{
    return value;
}

-(void)setValue:(NSInteger)newValue
{
    value = newValue;
}

自动创建为类字段。如果您使用的是保留对象,则需要手动保留/释放,除非您使用的是ARC。

保持上述一切不变(除了将
值更改为
以标准化),然后您可以实现以下一项或两项:

-(NSInteger)value
{
    return value;
}

-(void)setValue:(NSInteger)newValue
{
    value = newValue;
}

自动创建为类字段。如果您使用的是保留的对象,则需要手动保留/释放,除非您使用的是ARC。

我可以获得上述对象的修改示例吗。具体来说,我试图重写setter,但得到了一个
可写原子属性“Value”,无法将合成的setter/getter与代码中用户定义的setter/getter
错误消息配对。谢谢。仅供参考,在我出错的情况下,将
(非原子)
属性添加到我的属性中修复了警告。这很有趣。看起来你还得把它变成非原子的。我刚刚学到了一些东西!我想这可能是因为。长期从事程序员工作,但我对obj-c非常陌生。我猜编译器会抛出一个警告,因为合成的“原子”属性必须有特殊的代码,以确保线程间的一切安全。我还没有在我的应用程序中需要多线程,所以如果我需要的话,我会更深入地挖掘,并在遇到这个问题时跨越这座桥;这是如此罕见的必要。我可以得到一个修改后的样品上面的一个。具体来说,我试图重写setter,但得到了一个
可写原子属性“Value”,无法将合成的setter/getter与代码中用户定义的setter/getter
错误消息配对。谢谢。仅供参考,在我出错的情况下,将
(非原子)
属性添加到我的属性中修复了警告。这很有趣。看起来你还得把它变成非原子的。我刚刚学到了一些东西!我想这可能是因为。长期从事程序员工作,但我对obj-c非常陌生。我猜编译器会抛出一个警告,因为合成的“原子”属性必须有特殊的代码,以确保线程间的一切安全。我还没有在我的应用程序中需要多线程,所以如果我需要的话,我会更深入地挖掘,并在遇到这个问题时跨越这座桥;很少有必要这样做。