iPhone SDK synthesizing BOOL Array

2020-07-25 10:05发布

问题:

I get a compiler error when trying to synthesize a bool array like this:

// .h

#import <UIKit/UIKit.h>


@interface SomeViewController : UIViewController {

    BOOL boolArray[100];
}

@property (nonatomic) BOOL boolArray;

@end


//m

#import "SomeViewController"


@implementation SomeViewController

@synthesize boolArray;

@end

I probably did a fundamental mistake, but I can find it right now, synthesizing with boolArray[100] didn't work either.

回答1:

You probably need the full type, i.e. @property (nonatomic) BOOL boolArray [100];

The [100] is significant type information, not just an indication of how much space to allocate.

Also, I think the property will be treated like a const BOOL * that can't be assigned, so it would probably have to be readonly. The correct thing to do is probably make this readonly, which means that thins will fetch the array pointer then subscript it to assign to members of the array.

Alternately you can use an NSArray for this, but that will require that you use NSNumbers with boolVaules which is more of a biotch to deal with.

UPDATE

Actually the stupid compiler doesn't like the [] for some reason. Try this:

@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

ANOTHER UPDATE

This compiles:

@interface TestClass : NSObject {

    BOOL boolArray[100];
}

@property (nonatomic, readonly) const BOOL *boolArray;

@end


@implementation TestClass;

- (const BOOL *)boolArray {
    return boolArray;
}

@end

This is a bizarre issue. I wish the compiler would explain exactly what it's unhappy about like "Can't declare property with array type" or something.

YET ANOTHER UPDATE

See this question: Create an array of integers property in Objective C

Apparently according to the C spec, an array is not a "Plain Old Data" type and the Objective-C spec only lets you declare properties for POD types. Supposedly this is the definiition of PODs:

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

But reading that it seems like an array of PODs is a POD. So I don't get it.