gpt4 book ai didi

objective-c - 从 block 内调用 [self methodName]?

转载 作者:IT老高 更新时间:2023-10-28 11:25:06 24 4
gpt4 key购买 nike

我刚刚遇到 block ,我认为它们正是我要寻找的,除了一件事:是否可以从 block 中调用方法 [self methodName]?

这就是我想要做的:

-(void)someFunction{
Fader* fader = [[Fader alloc]init];

void (^tempFunction)(void) = ^ {
[self changeWindow:game];
//changeWindow function is located in superclass
};

[fader setFunction:tempFunction];
}

我已经搜索了几天,但找不到任何证据表明这是可能的。

这完全有可能吗,还是我试图将 block 用于它们不适合的东西?

我使用 block 的原因是我创建了一个 Fader 类,并且我想存储一个 block 以在它完成淡出时执行。

谢谢

编辑:好的,我在建议中添加了,但我仍然收到 EXC_BAD_ACCESS 错误...

-(void)someFunction{
Fader* fader = [[Fader alloc]init];

__block MyScreen* me = self;

void (^tempFunction)(void) = ^ {
[me changeWindow:game];
//changeWindow function is located in superclass
};

[fader setFunction:tempFunction];
[fader release];
}

也许我不允许给 fader 功能...?

最佳答案

是的,你可以这样做。

但请注意,该 block 将保留 self。如果您最终将此 block 存储在 ivar 中,您可以轻松创建一个保留周期,这意味着两者都不会被释放。

要解决这个问题,您可以这样做:

- (void) someMethodWithAParameter:(id)aParameter {

__block MySelfType *blocksafeSelf = self;
void (^tempFunction)(void) = ^ {
[blocksafeSelf changeWindow:game];
};

[self doSomethingWithBlock:tempFunction];

}

__block 关键字意味着(除其他外)被引用的对象不会被保留。

关于objective-c - 从 block 内调用 [self methodName]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5023566/

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