小编Aar*_*non的帖子

从Objective C块中执行选择器

我第一次尝试使用目标c块,因为我非常喜欢在Python和Haskell等语言中使用闭包.

我遇到了一个问题,但我希望有人可以提供帮助.

以下是我遇到的问题的最简单版本.

typedef void(^BlockType)(NSString *string);

- (void)testWithtarget:(id)target action:(SEL)action
{
    BlockType block = ^(NSString *string) {
        [target performSelector:action withObject:data];
    };

    block(@"Test String"); // Succeeds

    [self performSelector:@selector(doBlock:) withObject:block afterDelay:5.0f];
}

- (void)doBlock:(BlockType)block
{
    block(@"Test String 2"); // Causes EXC_BAD_ACCESS crash
}
Run Code Online (Sandbox Code Playgroud)

所以它似乎是某种内存管理问题并不让我感到惊讶,但我只是没有知识来看到解决方案.可能我正在尝试的可能甚至不可能.

有兴趣看看其他人的想法:)

iphone memory-management objective-c objective-c-blocks

2
推荐指数
1
解决办法
1661
查看次数

Xcode force_load不适用于模拟器构建

我正在使用Xcode 4和LLVM 2作为工作区,其中包含两个项目(A和B).主项目(A)链接到构建静态库的另一个项目(B)的二进制文件.

项目B包含类别,因此为了正确链接到A,我设置了ObjC和all_load链接器标志.然而,这会导致问题,因为我使用的某些库具有不应加载的符号,因此我尝试转移到在项目B的库文件上专门使用force_load.

-force_load $(TARGET_BUILD_DIR)/libB.a

这使得设备在设备上工作,但是在模拟器中应用程序崩溃,因为项目B中的类别未被链接.

知道为什么force_load在设备和模拟器上的工作方式不同吗?

如果您需要更多详细信息,请告诉我们.

xcode objective-c llvm

2
推荐指数
1
解决办法
1424
查看次数