
筆試公司: 廣州荔枝網(wǎng)絡有限公司
筆試崗位:高級iOS開發(fā)工程師
1.在采用MRR的內(nèi)存管理方式上,出現(xiàn)了如下圖的循環(huán)引用,那么在release B的時候出現(xiàn)內(nèi)存泄露,請?zhí)岢瞿愕慕鉀Q方案

在release B之前先進行 E release B操作;
在MRC 下E對B的代碼具體體現(xiàn)是@property(nonatomic, assign) Object *B;
在ARC 下E對B的代碼具體體現(xiàn)是@property(nonatomic, weak) Object *B;
平時用strong、retain、assign、weak這幾個關鍵字的時候,也沒有過多的在意,下邊就MRC、ARC模式下,每個關鍵字做一下總結。為了簡明期間,采用表格的形式進行展示。
| MRC | ARC | |
|---|---|---|
| strong | strong是在開始使用ARC內(nèi)存管理方式的時候引入的,如果硬是要在MRC模式下使用的話,經(jīng)過驗證,和在ARC模式下并沒有什么區(qū)別 | ARC模式下,strong同MRC模式下的retain |
| retain | MRC、ARC兩種內(nèi)存管理方式下相同 | MRC、ARC兩種內(nèi)存管理方式下相同 |
| assign | 可以用來修飾對象類型,也可以用來修飾基本數(shù)據(jù)類型。修飾對象類型的時候,對象的引用計數(shù)不會隨著引用次數(shù)的增加而增加,也就是說被釋放之前,引用計數(shù)永遠是1 | 只能用來修飾基本數(shù)據(jù)類型,不能用來修飾對象類型。除此之外,還用來修飾代理對象 |
| weak | MRC模式下不能夠使用weak來修飾對象和基本數(shù)據(jù)類型 | 相當于MRC模式下的assign |
2.以下代碼的作用是什么? 變量age被定義為NSInteger,它編譯時沒有問題【告警忽略】……但為什么會crash?
UILabel *mylabel=[UILabel new];
mylabel.text=age?[NSString stringWithFormat:@"%@",age]:@"";
最后程序會crash,并報EXC_BAD_ACCESS野指針異常
由于NSInteger age ;age 沒有賦值值, 系統(tǒng)會默認賦值4499059043
age 轉化為BOOL時候自然為YES,因此會執(zhí)行stringFormat,
由于%@ 會先調(diào)用 initWithFormat:locale:arguments: 再調(diào)用autorelease方法,所以會造成crash
3.題目:在一個整型數(shù)組中有一個元素的出現(xiàn)次數(shù)超過了數(shù)組長度的一半,試設計一個 在時間上盡可能高效的算法,找出這個元素。要求:
(1)給出算法的基本設計思想。
(2)根據(jù)設計思想,采用C或C++或Java語言描述算法,關鍵之處給出注釋。
(3)說明你所設計算法的時間復雜度和空間復雜度。
1)基本的設計思想
一個數(shù)字出現(xiàn)的次數(shù)超過了長度的一半, 那么我們可以這樣認為這個數(shù)字出現(xiàn)的個數(shù)一定大于其他全部數(shù)字出現(xiàn)的個數(shù)之和。算法的步驟如下:
①設數(shù)組為data[],數(shù)組長度為n,i=1。置currentAxis=data[0],currentNum=1。
②當data[i]==currentAxis時,currentNum++,轉向④;否則轉向③。
③currentNum--,當currentNum==0時,currentAxis=data[i]。
④當i==data.length時, 轉向⑤;否則,i++,轉向②;
⑤返回currentAxis。
2)具體代碼
#include<iostream>
using namespace std;
int funtion(int data[],int length)
{
int currentAxis; //假設要求的元素的位置
int currentNum = 0; //要求元素的個數(shù)變量
for(int i =0;i<length;i++)
{
if(currentNum ==0){
//如果要求的元素還沒出現(xiàn),設置要求的元素為現(xiàn)在要比較的元素
currentAxis=data[i];
currentNum=1;
}
else
{
if(currentAxis==data[i])
//假設的結果與比較元素不同,假設結果個數(shù)增1,否則減1
currentNum++;
else
currentNum--;
}
}
return currentAxis; //返回最終結果的位置。
}
int main()
{
int arr[]={1,2,3,2,5,6,2,2,3,2,2,4};
cout<<"number="<<funtion(arr,12)<<endl;
return 0;
}
3)時間復雜度為n,空間復雜度為1;
持續(xù)更新--請iOS的小伙伴關注! 喜歡的話給一個贊吧!
另外附上一份各個好友收集的各大廠面試題+答案 ! 需要的可加 iOS技術探討群:761407670 ,群文件直接獲取 !
點擊此處,與三千iOS開發(fā)大牛一起交流學習
作者:有度YouDo
原文鏈接:http://www.itdecent.cn/p/d2d8cf4e6ff6