autorelease はオブジェクト以外の C 配列を解放しますか? おそらくオブジェクトだけが参照カウントを知っているのではないでしょうか? ここに私のコードがあります:
-(int *)getCombination{
int xIndex = arc4random() % [self._num1 count] + 1;
int yIndex = arc4random() % [self._num2 count] + 1;
int *combination;
combination[0] = [[self._num1 objectAtIndex:xIndex]intValue];
combination[1] = [[self._num2 objectAtIndex:yIndex]intValue];
return combination;
}
これは私の main() 関数です:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([YYAAppDelegate class]));
}
}
自動解放はオブジェクトに対してのみ機能しますか、それとも私の c 配列を getCombination から解放しますか?
編集:答えはノーなので、自動解放は c 配列/ポインターでは機能しません。代わりに NSArrays を使用する次のコードを使用しました。
#import <Foundation/Foundation.h>
@interface Multiplication : NSObject
@property (strong, nonatomic) NSMutableArray *_combinations;
-(id)initArrays;
-(NSArray *)getCombination;
@end
#import "Multiplication.h"
@implementation Multiplication
@synthesize _combinations;
-(void)initializeArray{
self._combinations = [[NSMutableArray alloc]init];
for (int i = 1; i <= 10; i++) {
for (int j = 1; j <= 10; j++) {
NSNumber *x = [NSNumber numberWithInt:i];
NSNumber *y = [NSNumber numberWithInt:j];
[self._combinations addObject:[NSArray arrayWithObjects:x, y, [NSNumber numberWithInt:([x intValue] * [y intValue])], nil]];
}
}
}
-(NSArray *)getCombination{
if ([self._combinations count] == 0) {
[self initializeArray];
}
int index = arc4random() % [self._combinations count];
NSArray *arr = [self._combinations objectAtIndex:index];
[self._combinations removeObjectAtIndex:index];
return arr;
}
-(id)initArrays{
self = [super init];
if (self) {
[self initializeArray];
}
return self;
}
@end
ところで、この関数は、10X10 の掛け算表のすべての組み合わせをランダムに表示する方法を提供し、すべての組み合わせが表示され、同じ回数になったときに再開する方法を提供することになっています。