【问题标题】:iPhone SDK synthesizing BOOL ArrayiPhone SDK 合成 BOOL 数组
【发布时间】:2011-01-08 15:01:39
【问题描述】:

我在尝试像这样合成一个 bool 数组时遇到编译器错误:

// .h

#import <UIKit/UIKit.h>


@interface SomeViewController : UIViewController {

    BOOL boolArray[100];
}

@property (nonatomic) BOOL boolArray;

@end


//m

#import "SomeViewController"


@implementation SomeViewController

@synthesize boolArray;

@end

我可能犯了一个根本性的错误,但我现在可以找到它,用 boolArray[100] 合成也不起作用。

【问题讨论】:

    标签: objective-c arrays properties boolean compiler-errors


    【解决方案1】:

    您可能需要完整类型,即 @property (nonatomic) BOOL boolArray [100];

    [100] 是重要的类型信息,而不仅仅是指示要分配多少空间。

    另外,我认为该属性将被视为无法分配的const BOOL *,因此它可能必须是readonly。正确的做法可能是将此设置为只读,这意味着 Thins 将获取数组指针,然后将其下标以分配给数组的成员。

    或者,您可以为此使用NSArray,但这需要您将NSNumbers 与boolVaules 一起使用,这更像是一个恶作剧。

    更新

    实际上,愚蠢的编译器出于某种原因不喜欢 []。试试这个:

    @interface TestClass : NSObject {
    
        const BOOL *boolArray;
    }
    
    @property (nonatomic, readonly) const BOOL *boolArray;
    
    @end
    
    
    @implementation TestClass;
    
    - (const BOOL *)boolArray {
        if (!boolArray)
            boolArray = malloc(sizeof(BOOL) * 100);
        return boolArray;
    }
    
    - (void)dealloc {
        [super dealloc];
        free((void *)boolArray);
    }
    
    @end
    

    另一个更新

    这样编译:

    @interface TestClass : NSObject {
    
        BOOL boolArray[100];
    }
    
    @property (nonatomic, readonly) const BOOL *boolArray;
    
    @end
    
    
    @implementation TestClass;
    
    - (const BOOL *)boolArray {
        return boolArray;
    }
    
    @end
    

    这是一个奇怪的问题。我希望编译器能准确解释它的不满意之处,例如“无法声明具有数组类型的属性”之类的。

    还有一个更新

    看到这个问题:Create an array of integers property in Objective C

    显然,根据 C 规范,数组不是“普通旧数据”类型,Objective-C 规范只允许您声明 POD 类型的属性。假设这是 POD 的定义:

    http://www.fnal.gov/docs/working-groups/fpcltf/Pkg/ISOcxx/doc/POD.html

    但读起来似乎是一个 POD 数组就是一个 POD。所以我不明白。

    【讨论】:

    • 好的,我将切换并使用 NSArray - 感谢您的建议
    • 其实这行不通。我不明白 [100] Obj-C 的问题是什么,所以请参阅更新。
    • 查看另一个更新,可能会更好。这很奇怪。我将进一步研究这一点,因为我经常想绕过必须使用 NSArrays 来处理简单的事情,而且我真的不明白编译器对属性 decl 的抱怨。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 2011-05-12
    • 2012-02-17
    • 2011-06-18
    相关资源
    最近更新 更多