小编Gri*_*ess的帖子

@class之后"找不到接口声明错误..."

我遇到了一个似乎对我没有任何意义的Objective-C问题.我是一个相对精通的ObjC程序员,理解整个"前瞻性宣言"的概念,但这个让我摸不着头脑.所以这是交易:

ClassA是我的Xcode项目中的一个类,它只是项目.ClassB是ClassA的子类,它是公共的,并导入到我的框架的头文件中.

我正在建立一个"无法找到'ClassA'的接口声明,'ClassB'的超类......"错误.我已经@class ClassA;在ClassB.h中提出了前向声明,但这似乎并没有解决问题.当我更改@class ClassA;#import ClassA.h,它工作正常.但是,由于ClassA只是项目,因此依赖项目无法构建ClassB,因为它无法访问ClassA的源代码.

任何帮助将不胜感激,我希望这是有道理的.谢谢!

xcode objective-c

12
推荐指数
3
解决办法
3万
查看次数

ARC循环保留检测

我将一些旧代码移植到Objective-C ARC(自动引用计数),它看起来效果很好.当一个相当大的高级对象从我的导航堆栈弹出时没有被释放,让我相信我有一个ARC隐藏在我身边的某个保留周期(或者至少很难跟踪).清除这个潜在保留周期的最佳方法是什么和/或什么是确定ARC下内存泄漏原因的好方法?谢谢!

iphone xcode objective-c ios automatic-ref-counting

10
推荐指数
2
解决办法
7411
查看次数

GCD表现不佳

您可能还记得,我正在尝试使用GCD来加速我的一些代码,即碰撞检测和分辨率引擎.但是,我显然做错了,因为我的所有GCD代码都比我的串行代码慢得多且不那么一致(慢了1.4倍到10倍之间).请允许我举个例子:我以冒泡排序方式迭代数组,以确定该数组中对象之间可能发生的所有冲突:

- (double) detectCollisionsInArray:(NSArray*)objects
{   
    int count = [objects count];
    if (count > 0)
    {       
        double time = CFAbsoluteTimeGetCurrent();
        for (int i = 0; i < count; i++)
        {
            for (int j = i + 1; j < count; j++)
            {
                /** LOTS AND LOTS OF WORK FOR EACH OBJECT **/
            }
        }

        return CFAbsoluteTimeGetCurrent() - time;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

非常简单,考虑到问题的限制,它似乎表现良好.但是,我想利用以下事实:在代码部分中不修改每个对象的状态,并使用GCD来并行化这项工作.要做到这一点,我尝试这样的事情:

- (double) detectCollisionsInArray:(NSArray*)objects
{   
    int count = [objects count];
    if (count > 0)
    {
        NSOperationQueue* opQueue = [[NSOperationQueue …
Run Code Online (Sandbox Code Playgroud)

concurrency cocoa objective-c grand-central-dispatch

9
推荐指数
1
解决办法
7543
查看次数

适用于Mac OS X 10.6的Ada编译器

对.我目前正在上一个正在探索许多不同编程语言的课程.其中包括COBOL和Ada,我似乎无法找到免费的编译器.有没有人有更好的运气,如果有的话,我会在哪里找到它们?谢谢!

compiler-construction macos cobol ada

4
推荐指数
1
解决办法
4674
查看次数

Objective-C快速枚举冒泡排序

我正在尝试将一些GCD集成到我的代码中,并且发现严重的瓶颈是我在大型数组中的对象之间执行的泡泡比较.这是原始代码:

NSUInteger count = [arrayToDoWorkOn count];
for (int i = 0; i < count; i++)
{
    for (int j = i + 1; j < count; j++)
    {
        [[arrayToDoWorkOn objectAtIndex:i] compare:[arrayToDoWorkOn objectAtIndex:j]];
    }
}
Run Code Online (Sandbox Code Playgroud)

让我的漂移?因此,许多其他快速枚举任务可以通过转换轻松进行GCD

for (id obj in array)
{
    [obj aMessage:stuff];
}
Run Code Online (Sandbox Code Playgroud)

至:

[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
{
    [obj aMessage:stuff];
}];
Run Code Online (Sandbox Code Playgroud)

有没有办法将我的前瞻 - sorta-bubble-sorta-algorithm-thing转换为可以提供给GCD块实现的东西?

objective-c fast-enumeration objective-c-blocks

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

从C中的缓冲区分配

我正在构建一个简单的粒子系统,并希望使用结构的单个数组缓冲区来管理我的粒子.也就是说,我找不到允许我从任意缓冲区中取出malloc()和free()的C函数.这是一些伪代码来表明我的意图:

Particle* particles = (Particle*) malloc( sizeof(Particle) * numParticles );
Particle* firstParticle = <buffer_alloc>( particles );
initialize_particle( firstParticle );
// ... Some more stuff
if (firstParticle->life < 0)
    <buffer_free>( firstParticle );

// @ program's end
free(particles);
Run Code Online (Sandbox Code Playgroud)

其中<buffer_alloc><buffer_free>是从任意指针分配和释放内存块的函数(可能具有诸如缓冲区长度等的附加元数据).这些功能是否存在和/或有更好的方法吗?谢谢!

c memory-management particles particle-system

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

Objective-C空数组性能

我有一个应用程序,每一步迭代一个数组,当数组为空时,我似乎得到惊人的缓慢结果.所以,我调查了一些类似的后续测试:

NSMutableArray* ar = [NSMutableArray array];
double time = CFAbsoluteTimeGetCurrent();
for (int i = 0; i < 10000; i++)
{
    for (NSObject* obj in ar)
    {
        [obj retain];
        [obj release];
    }
}
time = CFAbsoluteTimeGetCurrent() - time;   
printf("Empty Time: %1.12f", time / 10000.0f);

time = CFAbsoluteTimeGetCurrent();
for (int i = 0; i < 10000; i++)
{
    if ([ar count] > 0)
    {
        for (NSObject* obj in ar)
        {
            [obj retain];
            [obj release];
        }
    }
}
time = CFAbsoluteTimeGetCurrent() - time; …
Run Code Online (Sandbox Code Playgroud)

collections objective-c

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

浮动值评估完全不正确

嘿互联网.我在C中有一个非常奇怪的问题.我导出一个浮点值,然后检查它是否大于0.但是,即使该值小于零,比较总是评估为true.这是代码:

if (sVel > 0.0f)
{
    sVel += 1.0f;
    sVel -= 1.0f;
    NSLog(@"SEP VEL: %1.6f", sVel);
    return;
}
Run Code Online (Sandbox Code Playgroud)

因此,将sVel设置为100会按预期打印日志并点击return语句; 凉.然而,sVel设置为-100并不能打印日志仍然碰到return语句.我完全糊涂了,我不知道从哪里开始跟踪这个......

c logic objective-c

0
推荐指数
1
解决办法
231
查看次数