Objective-C語法面試題
1. 為什么Foundation框架中的類名都是以NS開頭?(Just for fun)
2. 以下方法中哪一個返回的不是autorelease對象?
A. [NSData data]; B.[NSString stringWithString:];
C. [NSNumber numberWithInt:];
D. [NSTimer scheduledTimeInterval:target:selector:userInfo:repeats:];
3. #import與#include的區別是?
4. @class的作用是?
5. obj-c有多重繼承么?不是的話有什么替代方法?
6. 一下哪個方法名是合法的?
A. initWithFileID:filename:filePath:: B. startDownload
C. finishDownload:::::: D.以上都是合法的
7. 一個工程中存在group類(group.m, group.h)和people類(people.m, people.h),在group.m文件中的test方法如下:
-(void)test{
People*people = [[People alloc] init];
[NSTimerscheduledTimeInterval: 1.0f target:people selector:@selector(onCall) userInfo:nil repeats:YES];
}
請問onCall方法應該寫在哪個文件中?
A. group.m B. group.h
C. people.m D.people.h
8. 一個成員變量的聲明如下:
<p>@interface Test : NSObject{</p>NSString*str1;
NSString*str2;
}
<p>@property (nonatomic, assign) NSString str1;</p> <p>@property (nonatomic, retain) NSString str2;</p> <p>@end</p><p>@implementation Test</p>
<p>@synthesize str1;</p> <p>@synthesize str2;</p>
-(id)init{
self.str2= [NSString stringWithString:@”hello world”];
[str2retain];
self.str1= [[NSString alloc] initWithString:str2];
[str2release];
請問此時str1和str2的retainCount是多少?(不考慮系統對常量字符串的優化)
}
<p>@end</p>
9. 某個類中有一個test方法如下:
-(void)test{
NSString*str1 = [[NSString stringWithString:@”hello world”] retain];
NSString*str2 = [[[NSString alloc] init] autorelease];
(1) 請問此時str1與str2的retainCount是多少?(不考慮系統對常量字符串的優化)
str1 =[[[NSString alloc] initWithString:@”hello world”] autorelease];
str2 =[[NSString alloc] initWithString:str1];
[str1 release];
(2) 請問此時將str1和str2輸出的結果是什么?(不考慮系統對常量字符串的優化)
}
10. 請描述Objective-C的動態特性。
11. 這段代碼有什么問題,如何修改?
for (int i = 0; i < someLargeNumber;i++)
{
NSString *string= @”Abc”;
string = [stringlowercaseString];
string = [stringstringByAppendingString:@"xyz"];
NSLog(@“%@”,string);
}
12. 請寫出以下類成員變量自動生成的Getter和Setter方法。
<p>@property (nonatomic, retain) NSString str1;</p> <p>@property (nonatomic, assign) NSString str2;</p> <p>@property (nonatomic, assign) int num;</p><p>@synthesize str1 = _str1;</p> <p>@synthesize str2 = _str2;</p> @synthesize num = _num;