這是一小段代碼。作爲他們採訪的一部分,由俄羅斯公司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。 – 2012-02-23 15:04:22
這些文件是錯誤和其他潛在問題的寶庫。聲明和'@ interface'初始化靜態,不檢查的'超級init'結果,釋放'objB'兩次,不釋放'objC'。可能還有更多。 – dasblinkenlight 2012-02-23 15:09:57
最大的潛在問題是,他們將採訪的人,甚至僱人,誰使用計算器來解決這個問題。 – 2012-02-23 19:45:21