gpt4 book ai didi

objective-c - 如何在保留合成代码的同时向合成的 getter/setter 添加一些代码

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:23:38 24 4
gpt4 key购买 nike

例如,我需要在每次调用合成的 getter 或 setter 时执行 NSLog(@"Executed.")。我看到了 2 种方法:

  1. 找到一些可能像合成片段一样工作的片段。 This thread可能会有所帮助。
  2. 使用 KVO:添加一些将完成工作的观察者。

对我来说,所有这些看起来都不令人满意。所以,主题。

UPDAE:感谢您的回答,但直接覆盖不是解决方案:我们松开合成代码。如果我们从某个地方(甚至是苹果工程师给我们代码的苹果论坛)“复制粘贴”“正确的”合成代码,我们应该检查它在下一个编译器版本后没有改变。

最佳答案

您可以使用自定义的 getter 和 setter 编写一个额外的属性来执行您自己的操作,然后访问 @synthesized 的属性,如下所示:

Foo.h:

@interface Foo : NSObject
{
int bar;
}

@property int bar;
@property int bar2;


@end

Foo.m:

#import "Foo.h"

@implementation Foo

@synthesize bar;

- (int) bar2
{
NSLog(@"getter");
return self.bar;
}

- (void) setBar2:(int)newBar
{
NSLog(@"setter");
self.bar = newBar;
}
@end

然后是你的代码:

Foo *foo = [[Foo alloc] init];
foo.bar2 = 1;
foo.bar2 += 2;
[foo release];

所以您将使用“bar2”作为您的属性,但是您从@synthesized bar 中获得了所有细节。 bar 中的任何内容都将以线程安全的方式设置/获取,而 bar2 中的任何其他逻辑都不会(这对您来说可能无关紧要)

关于objective-c - 如何在保留合成代码的同时向合成的 getter/setter 添加一些代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11629097/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com