ここには小さなコードがあります。彼らのインタビューの一環としてロシアの会社Yandexによって掲示される。潜在的な問題は何ですか?それは私が見ることができない隠された問題でなければならない、非常に簡単に見えます。objective-cコードの潜在的な問題
まずヘッダ
//Foo.h
#import <Cocoa/Cocoa.h>
@interface Foo : NSObject
{
NSString* str;
static int i = 0;
}
- (NSString*) str;
@end
別のファイル
//Foo.m
#import "Foo.h"
@implementation
- (id) init
{
return [self initWithStr:"number:" someInt:6];
}
- (id) initWithStr:(NSString*)theStr someInt:(int)value
{
self = [super init];
str = [NSString stringWithFormat:@"%@%d", theStr, value];
return self;
}
- (NSString*) str
{
return str;
}
- (void) setStr:(NSString*)theStr
{
str = theStr;
}
@end
、別のファイルの最後のファイル
//main.m
#import <Cocoa/Cocoa.h>
#import "Foo.h"
int main(int argc, char *argv[])
{
Foo objA;
NSLog([objA str]);
[objA setStr:@"hello world!"];
NSLog([objA str]);
Foo* objB = [[Foo alloc] init];
Foo* objC = [[Foo alloc] initWithStr:@"My magic number:" value:265];
objB = objC;
NSLog([objB str]);
[objA release];
[objB release];
[objC release];
return 0;
}
文字列オブジェクトはコピーされません。さらに@implementationにはFooがありません。 –
これらのファイルは、エラーやその他の潜在的な問題の宝庫です。'super interface'の結果をチェックせず、' objB'を2回リリースし、 'objC'を解放しないで、' @ interface'で静的宣言と初期化を行います。多分もっと多くのものがあります。 – dasblinkenlight
最大の潜在的な問題は、誰かにインタビューしたり、この問題を解決するためにstackoverflowを使用した人を雇うことさえあるということです。 –