你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS 面試題:OC基本概念題(續)

iOS 面試題:OC基本概念題(續)

編輯:IOS開發綜合
第一,怎麼確定一個方法的方法名
去掉減號,加號,去掉返回值,去掉參數類型,去掉參數,剩下的就是方法名了

第二,id指向任何對象類型,可以用assign,copy,retain,根據需要使用

第三,autorelease 在什麼時候釋放?
在碰到autoreleasepool的時候釋放(可以把好幾個相同的變量放幾個不同的池裡)

第四,協議的方法默認是@required

第五,字典集合的特點?
字典是以鍵值對形式的保存元素
只能存儲對象,不能存儲基本數據類型

第六,如何定義一個類?
類的接口部分包含實例變量,屬性,和方法
可以把聲明和實現都放到.h文件裡
一對文件(Person.h Person.m)可以定義多個類
類比較抽象,對象比較具體

第七,什麼是類目?
類目可以為沒有源代碼的類,添加方法
類目中的方法和原類中的方法級別一樣,

第八,重寫用繼承把父類方法拿到子類重寫

第九,什麼是對象?
對象是類的實例,如美國總統奧巴馬

第十,屬性的屬性,

具體請點擊以下鏈接

OC 屬性的屬性



第十一,不要在set方法內部自己調自己,會陷入死循環


第十二,可變字符串與不可變字符串的區別
NSMutableString * str = [[NSMutableString alloc]initWithFormat:@“123”];
NSLog(@“str = %p”,str);
[str appendFormat:@“456”];
NSLog(@“str = %p”,str);
上面兩次打印的地址是一樣的

第十三,一個字典的key是唯一的,所以字典具有排重的功能,打印字典的時候,左邊是key,右邊是value

第十四,在類方法中不能使用實例變量

第十五,dealloc的注意事項(有系統自動調用)
開ARC不能寫[super dealloc]的方法
OC不能重載(方法名一樣,參數不一樣),只能重寫,

第十六,單例方法只是為了得到唯一的實例,方法中通常不帶參數
單例相當於全局變量,不能釋放,
比如用戶登錄,把用戶信息寫在單例裡面

第十七,初始法作用是,為變量賦初值

第十八,@package

@package(框架級別)作用域介於私有和公開之間,只要處於同一個框架中就可以直接通過變量名訪問.


第十九,隊列先進先出,棧先進後出

第二十,動態綁定
NSString * testObject = [[NSData alloc]init]
編譯時是NSString類型 (不檢測)

運行時是NSData類型 (檢測)

此處比較粗略,具體OC的動態特性請點擊下面鏈接

深入Objective-C的動態特性


第二十一,block修改外部變量時,用__block修飾

第二十二,delegate或者protocol申請屬性的時候為什麼用assign而不是retain?

協議的聲明,用assign屬性,避免了循環引用,欲知詳情請點擊下面.

delegate或者protocol申請屬性的時候為什麼用assign而不是retain

ios中常用的遍歷運算方法


遍歷的目的是獲取集合中的某個對象或執行某個操作,所以能滿足這個條件的方法都可以作為備選:
經典for循環
for in
makeObjectsPerformSelector
kvc集合運算符
enumerateObjectsUsingBlock
enumerateObjectsWithOptions(NSEnumerationConcurrent)
dispatch_apply

第二十四,屬性是方法不是變量 category裡面就是方法不會添加變量

第二十五,看到遍歷構造器,要想到autoreleasepool ,有時候便利構造器經常會出現內存洩露的錯誤


第二十六,協議是多個類分享的一個方法列表,在協議中所列出的方法沒有相應的實現,有其他人來實現
協議的property聲明用assign特性,因為要防止對象和其他代理對象之間互相引用,導致無法釋放內存


第二十七,類目,延展,協議,繼承的區別
類目:類目可以在不獲悉,不改變原來代碼的情況下往裡面添加新的方法,只能添加,不能刪除原有方法,但是無法添加實例變量

延展:延展可以同時添加實例變量和方法,而且添加的方法必須實現,可以視為一個私有的類目

協議:協議是多個類共享的一個方法列表,在協議中所列出的方法沒有相應的實現

繼承:不但可以添加實例變量和方法,也可以重寫原有類的方法

第二十八,當autorelease沒有autoreleasepool
因為便利構造器產生的對象如果沒有autoreleasepool 的話是無法釋放的,所以當循環數值過大時產生的對象會越來越多而且使用過的對象無法釋放內存占用越來越多,嚴重影響性能所以要在for循環中使用atutoreleasepool,即釋放內存從而避免內存洩露.
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved