Objective--C筆試題解析

整理出的一些簡單實用的OC筆試題,如有錯誤之處希望大家及時提出,以便修改,不誤人子弟.
1、
不會立刻使引用計數器改變的是:
答案:(C)
A、release //立即引用計數-1
B、alloc//引用計數+1
C、autorelease //出了釋放池之后才會起作用
D、retain//引用計數+1


2、
在OC中類的接口聲明關鍵字為:
答案:(B)
A、@import // 引入頭文件
B、@interface // 接口聲明
C、@implemention//實現部分聲明
D、@protocol//協議


3、
NSString *name = [[NSString alloc]initWithString:@"張三"]; NSLog(@"%d",[name retainCount]);
上述代碼打印結果是:
答案:(A)
A、-1
B、0
C、1
D、2
//如果輸出時用的是%d,則使用initWithString不管@""中的內容是什么,retainCount都是-1.
如果輸出時是%lu,則retainCount為整型最大數 .
//如果使用的是initWithFormat,@""里邊為中文,則retainCount為1,如果@""里邊是其他,則retainCount為-1 .
//如果使用的是stringWithFormat,內部會自動調用便利構造器中的alloc,打印結果跟編譯器有關,有的編譯器打印出的結果不準確,但是原理還是不變.


4、
下列選項中全部屬于對象的是:
答案:(C)
A、我的白色iPhone4s;Mac Mini
B、狗;老虎
C、鄰居家的貓咪“貝貝”;我的弟弟“張三”
D、保時捷;犀利哥
//寬泛指向的一定程度上還可以是一個類,因此,只有具體指向某一個對象的時候才能說它是一個對象


5、
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"a value" forKey:@"aKey"]; NSLog(@"%@",[dict objectForKey:@"aKey"]); [dict release];
控制臺中打印的最后一條信息會是:
答案:(C)
A、a value
B、aKey : a value
C、崩潰信息
D、a value : aKey
// 該程序前兩句沒有問題,最后一句由于并沒有使用alloc開辟,因此不必使用release自行釋放.


6、
現有如下集合,能準確刪除“張三”的代碼是:NSMutableDictionary * peoples=[NSMutableDictionary dictionaryWithObjectsAndKeys:@"張三",@"左護法",@"李四",@"右使",@"唐sir",@"老大哥", nil];
答案:(A)
A、[peoples removeObjectForKey:@"左護法"];
B、[peoples removeObject:@"張三"];
C、[peoples removeObjectAtIndex:0];
D、[peoples removeAllObjects];


7、
關于類和對象的概念,下列屬于對象的是:
答案:(C)
A、奧迪A6
B、保齡球
C、世界冠軍劉翔
D、西紅柿


8、
以下說法不正確的是:
答案:(A)
A、nonatomic:提供多線程保護,提高性能,在沒有使用多線程的編程中可以選擇使用。
B、assign:屬性默認值。說明設置器直接進行賦值,針對基礎數據類型 (NSInteger,CGFloat)和C數據類型(int, float, double, char)等等。
C、retain:此屬性只用于obj-c的對象類型,對參數進行release舊值,再retain新值。
D、copy:此屬性只對實現NSCopying協議的對象有效(NSString)。拷貝工作由copy方法執行。
// (A) nonatomic并不提供多線程保護,atomic才提供


9、
NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"2", nil]; NSMutableSet *set = [[NSMutableSet alloc]init]; for(NSString *str in array) { [set addObject:str]; } NSLog(@"%lu",[set count]); [set release];
控制臺打印的結果是:
答案:(A)
A、4 //set中不能存放重復的對象
B、5
C、6
D、7


10、
經過下列哪種操作后需要使用release方法。
答案:(C)
A、delegate
B、assign
C、retain//與release對應
D、dealloc // 與alloc對應


11、
聲明一個方法:提供Student對象數組按照學號升序排列的判斷條件:
答案:(A)
A、-(NSComparisonResult)compareWithNumberForAscendSort:(Student*)otherStudent B、-(NSInteger)compareWithNumberForAscendSort:(Student*)otherStudent C、- (BOOL))compareWithNumberForAscendSort:(Student*)otherStudent D、+(int)compareWithNumberForAscendSort:(Student*)otherStudent


12、
下列哪個選項不需要release方法:
答案:(C)
A、[[NSString alloc]init];
B、[[NSString alloc] initWithString:@”hehe”];
C、[[NSArray arrayWithArray: arr1];
D、[[NSMutableDictionary alloc] init];
// 誰污染誰治理原則,只要開辟空間就需要釋放


13、
OC中,所有類的根類是:
答案:(A)
A、NSObject
B、NSDate
C、NSCoding
D、UIView


14、
下列哪個選項與@synthesize配合使用:
答案:(D)
A、@end
B、@interface
C、@implementation
D、@property //在較早的編譯器中,需要使用@synthesize來讓編譯器自動生成屬性所對應的實例變量的setter\getter方法的實現部分 (現在的編譯器只需要聲明屬性@property就可以了)


15、
向Xcode控制臺輸出一個字符串應該用:
答案:(A)
A、NSLog()
B、Printf()
C、NSPrintf()
D、scanf()


16、
必須實現的協議方法使用:關鍵字聲明.
答案:(C)
A、@property
B、@interface
C、@required // 如果不寫,系統默認的就是required
D、@protocol


17、
NSMutableString * str = [[NSMutableString alloc] initWithFormat:@"123"]; NSLog(@"str = %p",str); [str appendFormat:@"456"]; NSLog(@"str = %p",str);
上面代碼對字符串str進行拼接后,2次打印的地址是否相同:
答案:(A)
A、相同 // 可變字符串的操作是在原字符串的基礎上操作的,不生成新的字符串,因此拼接是在原字符串后直接拼接,地址不變.
B、不同
C、隨機打印
D、有時相同,有時不同


18、
Objective-C的代碼文件的后綴為:
答案:(B)
A、.cpp //c++
B、.m // OC
C、.pl //Perl語言程序的后綴
D、.c //c語言


19、
下列說法中錯誤的是:
答案:(C)
A、Objective-C不用"函數調用",而用互相傳遞訊息.
B、Objective-C一個完整的類分為interface和implementation兩塊
C、Objective-C對象使用new分配內存,用delete釋放 // 使用alloc分配和dealloc釋放
D、Objective-C協議分為非正式協議和正式協議


20、
NSArray *array = [NSArray arrayWithObjects:@"one", @"two", @"three",nil]; NSLog(@"%@",[array objectAtIndex:1]); NSLog(@"%@",[array objectAtIndex:3]);
控制臺中打印的最后一條信息會是:
答案:(D)
A、one
B、two
C、three
D、崩潰信息 // 最后一句數組越界了(只有三個對象)


21、
OC中布爾(BOOL)類型的變量的值只有:
答案:(B)
A、1/0
B、YES/NO
C、true/false
D、1/-1


22、
Objective-C中包含一個自定義的頭文件應該使用:
答案:(C)
A、#include "" // c中的自定義
B、#include<> // c中系統類庫
C、#import "" // OC自定義類
D、#import<>//OC系統類庫


23、
在OC中,類中成員變量的可見度(訪問權限)不包括:
答案:(D)
A、@public
B、@protected
C、@private
D、@optional //協議中用于可選方法


24、
OC中的委托最好聲明成:
答案:(B)
A、retain
B、assign
C、copy
D、readonly


25、
面向對象的特性不包括:
答案:(D)
A、封裝
B、繼承
C、多態
D、構造


26、
OC中與alloc相反的方法是:
答案:(C)
A、release
B、retain
C、dealloc
D、free


27、
用哪個關鍵字定義協議中必須實現的方法:
答案:(D)
A、@optional
B、@protected
C、@private
D、不用寫關鍵字 // 默認就是required


28、
下面哪些選項是屬性的正確聲明方式:
答案:(C)
A、@property(nonatomic,retain)NSString myString; // NSString * B、@property(nonatomic,assign)NSString * myString;//assign用于修飾基本數據類型 C、@property(nonatomic,assign)int mynumber; D、@property(nonatomic,retain)int mynumber;// int型用assign修飾


29、
對于Objective-C中的方括號“[]”的作用,下列說法錯誤的是:
答案:(D)
A、用于通知某個對象該做什么
B、方括號內第一項是對象,其余部分是你需要對象執行的操作
C、在Objective-C中通知對象執行某種操作,稱為發送消息.(也叫調用方法)
D、方括號中可以為空 //不能為空


30、
以下代碼執行后,person對象的retain count是多少:
Person * person = [[Person alloc] init];//alloc后引用計數+1 [person retain]; //retain后再+1 [person release];//release后-1
答案:(B)
A、0
B、1
C、2
D、3


31、
創建對象時,對象的內存和指向對象的指針分別分配在哪里:
答案:(A)
A、堆區,棧區 // 程序員能操作的只有堆內存,因此開辟空間只能在堆中
B、常量區,堆區
C、全局區,棧區
D、棧區,堆區


32、
協議與委托的描述不正確的是:
答案:(C)
A、委托是iOS的一種設計模式
B、協議里的方法默認是必須實現的
C、類接受了多個協議,這些協議寫在父類后面的<>內,多個協議之間用“、”隔開//多協議的話應該在<>中用","隔開
D、定義協議使用@protocol關鍵字


33、
類何時調用dealloc方法:
答案:(D)
A、[property release]后
B、[instance release]后
C、[super dealloc]時
D、當引用計數為0時.


34、
NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; [formatter setAMSymbol:@"AM"]; [formatter setPMSymbol:@"PM"]; [formatter setDateFormat:@"YY-MM-dd hh:mm:ss aaa"]; NSString * currentDate = [formatter stringFromDate:[NSDate date]]; NSLog(@"%@",currentDate);
打印結果是:
答案:(D)
A、2012-05-31 17:45:04 PM
B、12-05-31 17:45:04
C、2012-05-31 17:45:04
D、12-05-31 05:45:04 PM


35、
NSRange的成員變量有:
答案:(A)
A、location,length //位置和長度信息,表示從下標為location開始,往后數length個長度
B、width,height
C、location,height
D、length,width


36、
現有自定義類Student,下列選項中Student類的便利構造器編寫正確的是:
答案:(D)
A、-(id) initWithName:(NSString *) newName{ Student * stu = [[Student alloc] init]; stu.Name= newName; return stu;}//初始化方法,不是便利構造器 B、+(id) studentWithName:(NSString *) newName{ Student * stu = [[Student alloc] init]; stu.Name= newName; return stu;}//沒有釋放過程 C、+(id) studentWithName:(NSString *) newName{ Student * stu = [[Student alloc] init]; stu.Name= newName; [stu release]; return stu;}//release會立即-1 D、+(id) studentWithName:(NSString *) newName{ Student * stu = [[Student alloc] init]; stu.Name= newName; [stu autorelease]; return stu;}


37、
自定義一個Person類,下面哪個選項是規范的便利構造器聲明方式:
答案:(D)
A、-(id)personWithName:(NSString *)theName;//排除A和B,因為是+號方法 B、-(id)personwithName:(NSString *)theName; C、+(id)personwithName:(NSString *)theName;//駝峰法命名,with要大寫 D、+(id)personWithName:(NSString *)theName;


38、
下列代碼正確的輸出結果是:
NSString * urlStr = @" www.lxweimin.com"; NSRange range = NSMakeRange(4,7); NSString *prefix = [urlStr substringWithRange:range]; NSLog(@"%@",prefix);
答案:(B)
A、.ji
B、jianshu
C、www.jia
D、jian


39、
在OC中擴展類的方法的形式不包括:
答案:(B)
A、繼承
B、多態
C、類目//不能添加實例變量
D、延展//為對象添加私有實例變量和方法


40、
關于KVC的描述正確的是:
答案:(B)
A、KVC是指"Key-Value Observing"http://鍵值編碼Key-Value-Coding
B、是一種間接訪問對象的屬性的機制。
C、只能訪問對象的屬性。//也可以修改
D、當對象的屬性值改變時,我們能收到一個通知。


41、
以下說法正確的是:
答案:(C)
A、求數組的內容的個數用length方法//用count,length是求字符串長度的方法
B、字典是根據其位置來索引數據的//字典中的存儲是無序的
C、協議中定義的方法默認是必須實現的
D、定義類目必須要拿到自己類的源代碼//不用拿到源代碼,只需在建立Category文件時指明為哪個類添加方法即可


42、
簡單類型的成員比如:int類型成員在使用@property()時,括號中應使用:
答案:(A)
A、assign
B、copy
C、retain
D、auto


43、
下列代碼:@property(nonatomic,assign)id<Painting>myObject;
答案:(C)
A、是說myObject是Painting分類的一部分
B、是說myObject遵從于Painting分類
C、是說myObject遵從于Painting協議//協議代理對象
D、不是合法的Objective-C語法格式


44、
內存管理的關鍵字描述錯誤的是:
答案:(C)
A、retaincount是指對象的引用計數。
B、retain關鍵字可以增大對象的引用計數。
C、release可以減小對象的引用計數,但autorelease不可以 //autorelease也可以,只是在出了自動釋放池后才-1
D、dealloc方法不能直接調用


45、
下面程序段的輸出結果是什么:
NSMutableArray * arr1 = [[NSMutableArray alloc] initWithObjects:@"1",@"2",@"3", nil];[arr1 addObject:@"0"]; [arr1 replaceObjectAtIndex:2 withObject:@"3"]; NSLog(@"%@",arr1);

答案:(B)

A、0,1,2,3

B、1,2,3,0//下標為2的對象是@"3",替換的對象還是@"3"

C、1,3,3,0

D、0,3,2,3


46、
下列有效的鍵路徑是:
答案:(B)
A、[foo valueForKeyPath:@”1SomeMember”]
B、[foo valueForKeyPath:@”someMember.someAttribute”]
C、[foo valueForKeyPath:@”SOMEMEMBER@someAttibute”]
D、[foo valueForKeyPath:@”some Member”]


47、
有一個類Student,要求實現:定義一個實例初始化方法,初始化方法需要傳入名字和性別:
答案:(B)
A、-(id)initWithName:(NSString *)name sex:(NSString *)sex{ if (self){ self.name = name; self.sex = sex; } return self;} B、-(id)initWithName:(NSString *)name sex:(NSString *)sex{ if (self = [super init]) { self.name = name; self.sex = sex; } return self;} C、-(id)initWithName:(NSString *)name sex:(NSString *)sex{ if (!self) { self.name = name; self.sex = sex; } return self;} D、-(id)initWithName:(NSString *)name sex:(NSString *)sex{ if (self = [super init]) { self.name = name; self.sex = sex; }}


48、
下面哪個選項對集合的描述是正確的:
答案:(D)
A、集合內不能存不同類型的對象//只要是對象就可以,但是不能存放重復的對象
B、集合內可以存整型的數//只能是對象
C、字典內鍵值可以相同,但是每個鍵值對應的對象必須不同//鍵值對應的value可以相同
D、集合內只能存對象


49、
NSString 和 NSMutableString的關系和區別描述不正確的是:
答案:(D)
A、NSString是不可變字符串,即本身內容不能被改變。
B、NSMutableString是可變字符串,即本身內容可修改。
C、NSMutableString是NSString的子類。
D、NSString和NSMutableString沒有任何關系。//有繼承關系


50、
下面哪個選項無內存問題的:
答案:(C)
A、-(NSString *)description{ NSString * str = [[NSString alloc] initWithFormat:@"description"]; return str;} B、-(NSString *)description{ NSString * str = [[NSString alloc] initWithFormat:@"description"]; [str release]; return str;}//不能立即釋放 C、-(NSString *)description{ NSString * str = [[NSString alloc] initWithFormat:@"description"]; [str autorelease]; return str;} D、-(NSString *)description{ NSString * str = [NSString stringWithFormat:@"description"]; return [str autorelease];}//沒有使用alloc開辟,不需要手動釋放


51、
關于NSSet描述正確的有:
答案:(B)
A、NSSet可以存放任何數據類型的數據。//只能是對象
B、NSSet存放數據是無序的。
C、NSSet可以通過下標獲取數據。//無序存儲
D、NSSet存放的數據是有序的。


52、
下列哪個選項不能作為property的可選屬性:
答案:(A)
A、alloc
B、retain
C、atomic
D、strong


53、
NSRange是什么數據類型:
答案:(C)
A、數組
B、字典
C、結構體
D、指針


54、
下面描述正確的選項是:
答案:(B)
A、當計數器為1時,dealloc方法由系統自動調用//計數器為0 時才調用dealloc
B、一個對象在引用計數變為0時,會調用自己的dealloc方法
C、在dealloc方法里,應該在[super dealloc]后釋放本類所擁有的對象//先釋放本類擁有對象再調用父類的dealloc方法
D、開啟ARC后,可以重載dealloc,必須在dealloc里寫 [super dealloc]方法//ARC模式下無需手動寫內存釋放方法.


55、
實例變量默認的訪問修飾符是:
答案:(C)
A、@public
B、@private
C、@protected
D、@package


56、
下面程序段的輸出結果是什么:
NSArray * arr1 = [[NSArray alloc] initWithObjects:@"1",@"2",@"3", nil]; NSString *str; str = [arr1 objectAtIndex:2]; NSLog(@"%@",str);
答案:(C)
A、1
B、2
C、3
D、程序崩潰


57、
@interface Person : NSObject@property(nonatomic,retain)NSString * name;@end上面聲明一個Person類
Person * per = [[Person alloc] init]; per.name = [[NSString alloc] initWithFormat:@"張三"]; NSLog(@" per.name = %d",[per.name retainCount]);
答案:(D)
A、per.name = -1;
B、per.name = 0;
C、per.name = 1;
D、per.name = 2;


58、
下面程序段的輸出結果是什么:
NSMutableDictionary * dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"1",@"2",@"2",@"3",@"3",@"4", nil]; [dic removeObjectForKey:@"3"]; NSLog(@"%@",dic);//字典打印時前邊是鍵,后邊是值
答案:(C)
A、1=2 3=4
B、1=2 2=3
C、2=1 4=3
D、2=1 3=2


59、
關于協議描述不正確的是:
答案:(D)
A、協議分正式和非正式協議。
B、在要求確認協議的類必須實現協議中的方法時,可以使用@required。
C、一個協議可以被多個類確認。
D、協議中聲明的方法,默認是@optional的。//默認是required


60、
下面哪個選項是正確的:
答案:(B)
A、用繼承可以擴展一個類,要調用擴展的方法,既可以用父類,也可以用子類//父類不能調用子類的方法
B、用類目可以擴展一個類,可以直接用該類或該類的實例對象,去調用該類目擴展的方法
C、延展就是類目//延展extension,類目category
D、可以在一個類的外部,調用這個類延展的方法//延展中的方法都是私有的


61、
以下對類的描述不正確的是:
答案:(C)
A、類的接口部分可以包含實例變量、屬性和方法
B、可以把聲明和實現都放到.h文件中
C、一對文件(Person.h Person.m)只能定義一個類//可以定義多個類
D、類比較抽象,對象比較具體


62、
聲明一個返回值為NSArray,并且帶兩個字符串對象的BLOCK類型變量:
答案:(D)
A、NSArray (*aBlock)(NSString * str,NSString *str2) B、NSArray ^(*aBlock)(NSString * str,NSString *str2) C、NSArray (^aBlock)(NSString * str,NSString *str2) D、NSArray *(^aBlock)(NSString * str,NSString *str2)//block用^來修飾


63、
Objective-C 語言中類的實例變量如果只可以被本類和其子類訪問,需要下列哪個修飾符:
答案:(C)
A、@public
B、@private//子類也訪問不到,外部更拿不到
C、@protected
D、@friendly


64、
關于類目、延展的描述錯誤的是:
答案:(B)
A、延展主要為類提供“私有”方法
B、類目、延展不但能為類添加方法,而且都可以添加新的實例變量//類目不能添加實例變量
C、無論能否拿到類的源碼,類目都可以對其擴展
D、類目和延展聲明語法不同


65、
現要求聲明一個集合,并將字符串添加到集合中,編寫了如下代碼,其中錯誤的是第幾行:NSString * aString = [[NSString alloc] initWithString:@"iLanou"]; (1)[aString autorelease]; (2)NSArray * arr = [NSArray array]; (3)[arr addObject:aString]; //不可變數組沒有addObject方法 (4)NSLog(@"string = %lu",[aString retainCount]);
答案:(C)
A、(1)
B、(2)
C、(3)
D、(4)


66、
查看下列代碼,能正確輸出number的選項是:
@interface MyClass : NSObject { int number; } +(void) printNumber; @end @implementation MyClass +(void) printNumber { number =10; NSLog(@""%d"",number); } @end
答案:(D)
A、[MyClass printNumber];
B、MyClass * obj = [[MyClass alloc] init]; [obj printNumber];
C、printNumber();
D、編譯錯誤,無法執行。//@""%d"",引號太多了


67、
讀代碼
NSString * str =[[NSString alloc]initWithFormat:@"%@",@"iLanou123ios"]; NSString * str1=[str substringToIndex:3]; NSString * str2=[str substringWithRange:NSMakeRange(6, 3)]; NSString * newStr=[str1 stringByAppendingString:str2]; NSLog(@"newStr=%@",newStr);
則newStr的值為:
答案:(D)
A、iLanou
B、iL123
C、iLaios
D、iLa123


68、
對于下面代碼說法正確的是:
@property (copy,nonatomic,readonly)NSString * calValue;//只能讀不能寫,只有getter方法,沒有setter方法.不能保證多線程安全
答案:(D)
A、沒有getter方法,當對calvalue賦值時,將產生一個NSString副本。
B、此屬性可保證多線程安全。
C、此屬性在合成時可以生成設置器方法。//應該是訪問器
D、此屬性只能讀取,不能賦值。


69、
NSMutableDictionary * dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"1",@"2",@"2",@"3",@"3",@"4", nil]; NSArray *arr = [[NSArray alloc] initWithArray:[dic allKeys]]; NSString *str = [[NSString alloc] initWithFormat:[arr objectAtIndex:0],[arr objectAtIndex:1],[arr objectAtIndex:2]]; NSLog(@"%@",str);
結果是:
答案:(C)
A、123
B、234
C、2
D、3


70、
下面程序段的輸出結果是什么:
NSString * aString = [[NSString alloc] initWithFormat:@"123"]; NSLog(@"%d",aString.retainCount); aString = @"456"; NSLog(@"%d",aString.retainCount); [aString release]; aString = @"789"; NSLog(@"%d",aString.retainCount);
答案:(D)
A、1,2,1
B、1,1,0
C、1,-1,0
D、1,-1,-1 //便利構造器中個的alloc先+1 ,指針指向@"123",后指針指向改變,指向了常量區對象@"456",引用計數為-1,指針又重新指向新對象@"789",新對象引用計數為-1.
71、
下面程序段的輸出結果是什么:
NSMutableDictionary * dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"1",@"2",@"2",@"3",@"3",@"4", nil]; NSString *str = @"3";int a = 3;[dic setObject:a forKey:str]; NSLog(@"%@",dic);
答案:(D)
A、2=1 3=3 4=3
B、1=2 3=3 3=4
C、1=2 3=3 3=3
D、程序崩潰 //setobject :a ,a是基本數據類型,value只能是對象


72、
寫出下面程序段的輸出結果:
NSString * aString = [[NSString alloc] initWithString:@"123"]; [aString autorelease]; NSMutableArray * arr = [NSMutableArray array]; [arr addObject:aString]; NSLog(@"string = %lu",[aString retainCount]);
答案:(C)
A、1
B、0
C、整型最大值 //18446744073709551615
D、2


73、
NSMutableDictionary字典中刪除對象可以使用下面那個方法:
答案:(D)
A、filteredArrayUsingPredicate:
B、arrayByAddingObject:
C、initWithCapacity:
D、setValue:forKey:


74、
有如下一個類定義
@interface MyClass:NSObject @property(nonatomic,retain)NSString *str; @end @implementation MyClass (1)-(NSString *)str{ return str;} -(void)dealloc{ self.str = nil; [super dealloc];} @end
(1)處補充完整:
答案:(C)
A、-(void)setStr:(NSString *)newStr{ str = newStr;} B、-(void)setStr:(NSString *)newStr{ [str release]; str = [newStr retain];} C、-(void)setStr:(NSString *)newStr{ if(str != newStr) { [str release]; str = [newStr retain]; }} D、-(void)setStr:(NSString *)newStr{ [newStr retain] [str release] = newStr;}


75、
下列哪個操作不會引起引用計數(retaincount)的變化是:
答案:(B)
A、NSString *str1 = [[NSString stringWithFormat:@"hehe"];//構造便利器內部發生引用計數的變化 B、int a=1; C、NSMutableData *data1 = [NSMutableData allocWithZone:data2]; D、NSArray *arr1 = [[NSArray alloc]initWithArray:arr2];


76、
下面程序段的輸出結果是什么:
NSString * aString = [[NSString alloc] initWithString:@"hehe"]; [aString autorelease]; NSMutableArray *arr = [NSMutableArray array]; [arr addObject:aString]; NSLog(@"string = %d",[aString retainCount]);
答案:(A)
A、string = -1
B、string = 0
C、string = 1
D、string = 2


77、
下面程序段的輸出結果是什么:
NSMutableDictionary * dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"1",@"2",@"1",@"3",@"1",@"4", nil]; NSArray *arr1 = [[NSArray alloc] initWithArray:[dic allKeys]]; NSArray *arr2 = [[NSArray alloc] initWithArray:[dic allValues]]; NSMutableDictionary *dic2 = [[NSMutableDictionary alloc] initWithObjects:arr1 forKeys:arr2]; NSLog(@"%@",dic2); // 字典中鍵不能重復
答案:(C)
A、1=2 1=3 1=4
B、2=1 3=1 4=1
C、1=4
D、4=1
78、
下面程序段的輸出結果是什么:
int a = 10; NSNumber *b = [[NSNumber alloc] initWithInt:a]; NSLog(@"%d", a+++b);
答案:(D)
A、21
B、20
C、30
D、編譯錯誤 // 輸出時類型不匹配,b是一個對象


79、
下面程序段的輸出結果是什么:
NSMutableDictionary * dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"1",@"2",@"2",@"3",@"3",@"4", nil]; [dic setObject:@"1" forKey:@"3"]; [dic removeObjectForKey:@"1"];//沒有key為1的值 NSLog(@"%@",dic);
答案:(C)
A、1=3 2=3 3=4
B、1=2 1=3 3=4
C、2=1 3=1 4=3
D、3=1 3=2 4=3


80、
下列選項中不能正常為emp的name屬性賦值的代碼有:
答案:(B)
A、emp.name=@"李嘉誠";
B、emp->name=@"李開復";
C、[emp setValue:@"柳傳志" forKey:@"name"];
D、[emp setName:@"黃光裕"];


1、
一個文件中可以聲明多個類。
答案:(T)
正確
錯誤


2、
實例對象都是通過調用類方法生成的。
答案:(T)
正確
錯誤


3、
方法需要傳遞多個參數時,參數以逗號分隔。//參數用:隔開
答案:(F)
正確
錯誤


4、
不是每個對象都有引用計數。 //每個對象都有引用計數
答案:(F)
正確
錯誤


5、
Objective-C 可以多重繼承。
答案:(F)
正確
錯誤


6、
為了保證程序不產生額外的內存開銷,當對象不再被需要以后,應當被立即銷毀。
答案:(T)
正確
錯誤


7、
retain的作用是引用計數減一。//+1
答案:(F)
正確
錯誤


8、
注釋可以出現在程序的任何位置。
答案:(T)
正確
錯誤


9、
在dealloc方法中對變量的釋放順序與初始化的順序相同。//相反,初始化時先調父類初始化方法,釋放時,先釋放自身,再調用父類釋放方法
答案:(F)
正確
錯誤


10、
便利構造器產生的對象應當由使用者進行銷毀。//便利構造器內部已經實現了開辟與釋放的平衡,不需要手動釋放.
答案:(F)
正確
錯誤

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容