簡述OC中內存管理機制锨匆。與retain配對使用的方法是dealloc還是release,為什么脐嫂?
需要與alloc配對使用的方法是dealloc還是release统刮,為什么紊遵?
readwrite账千,readonly,assign暗膜,retain匀奏,copy,nonatomic 学搜、atomic娃善、strong、weak屬性的作用瑞佩?
?1.OC的內存管理機制是引用計數, 內存管理原則是誰開辟誰釋放, 有retain就要有release.
2. 分為ARC(自動引用計數)和MRC(非自動引用計數), 在MRC下, 我們需要手動管理內存,需要使用到retain/copy/release/autorelease等方法實現內存管理, ARC下一般不需要程序員手動管理內存, 系統(tǒng)會為程序添加自動釋放池以實現內存管理,?
當然, 咱們說的一般不需要不能理解為完全不需要考慮內存問題, 比如在解決block循環(huán)引用問題的時候, 就需要使用__weak修飾, 需要注意的是ARC和MRC下解決循環(huán)引用的方法還不一樣,MRC下是__block, ARC下是__weak . 二.與retain匹配的是release, 因為retain是引用計數+1, 在內存管理中, 要記得內存管理原則: 誰開辟誰釋放, 有retain就要有release.? release是引用計數-1. alloc匹配的是dealloc, alloc是開辟內存空間, dealloc是銷毀所開辟的內存, 有開辟就要有銷毀. 三.readWrite讀寫特性, 可讀可寫. readonly只讀, 只有getter, 沒有setter. assign一般用于基本數據類型和ID類型. copy拷貝, 一般用于? NSString. 分為深拷貝和淺拷貝, 深拷貝拷貝的是對象, 淺拷貝拷貝的是指針. nonatomic非原子性, 不考慮線程安全, 優(yōu)點是效率高. atomic原子性, 有點是線程安全, 缺點是效率低. strong強引用, 和MRC下的retain一樣. weak弱引用, 類似MRC下的assign. 但是要注意的是strong和weak都是修飾對象類型的屬性的, 不能修飾基本數據類型. ARC下仍然使用assign修飾基本數據類型.
類變量的@protected ,@private,@public,@package聚磺,聲明各有什么含義?@protected 該類和所有的子類中的方法可以直接訪問這樣的變量炬丸,這是默認的瘫寝。@private被修飾的變量是私有的 @public公有, 除了自己和子類中的方法外蜒蕾,也可以被其他類或者其他模塊中的方法所訪問。@package只能在本包內使用, 不能跨包使用.
說一下@public, 我們用到的地方不多. 但是我現在有一個需求, 就是給一個對象的成員變量賦值.1. 寫一個seter方法. 2. KVC. 3. @public修飾.
3.? ? ? ? 線程是什么焕阿?進程是什么咪啡?二者有什么區(qū)別和聯系? 進程是對正在運行的程序過程的抽象, 其實就是咱們程序本身. 程序是指令暮屡、數據及其組織形式的描述撤摸,進程是程序的實體. 線程是程序運行的基本單元(可以理解為一個進程中執(zhí)行的代碼片段), 進程可以認為是一個容器, 里面裝的線程真正的在執(zhí)行代碼, 完成功能. 一個程序在運行的時候就是一個進程, 一個進程至少一個線程.
4. 談談你對多線程開發(fā)的理解?ios中有幾種實現多線程的方法褒纲?http://www.cocoachina.com/ios/20140520/8485.html;這個帖子寫的挺好的, 可以抽時間看看.好處:也就是為什么要使用多線程.1准夷、使用線程可以把程序中占據時間長的任務放到子線程去處理,如圖片莺掠、視頻的下載2冕象、發(fā)揮多核處理器的優(yōu)勢,并發(fā)執(zhí)行讓系統(tǒng)運行的更快汁蝶、更流暢渐扮,用戶體驗更好缺點:缺點可以稍微提一點1、更多的線程需要更多的內存空間2掖棉、當多個線程對同一個資源出現爭奪的時候要注意線程安全的問題墓律。iOS有三種多線程編程的技術:1、NSThread2幔亥、NSOperationQueue
3耻讽、Grand Central Dispatch (GCD)
在多線程操作中, 需要考慮線程安全問題, 線程鎖.GCD內部對于線程安全有處理, 所以不需要考慮線程安全問題.
線程同步和異步的區(qū)別?? 同步:一個線程要等待上一個線程執(zhí)行完之后才能執(zhí)行當前的線程帕棉,生活中的例子(上廁所)针肥。異步:同時去做兩件或者多件事。比如邊聽歌邊看報香伴。
假設有一個字符串aabcad慰枕,請寫一段程序,去掉字符串中不相鄰的重復字符串即纲,即上述字符串處理之后的輸出結果為:aabcd
本題的題意是以第一個出現的字母作為參照具帮,只要之后出現相同的字母并且和第一個字母不相鄰,那么就刪除低斋。為防止刪除某些字符之后蜂厅,把之前不相鄰的重復字符串轉化為相鄰字符串,所以可以先用空格替換掉需要刪除的字符膊畴,最后對數組里面的空格進行處理掘猿。-(void)removeRepeat:(NSString *)aNum
{
NSMutableArray *mArr = [[NSMutableArray alloc]initWithCapacity:10];
for (int i = 0;i < aNum.length;i++)
{
[mArr addObject:[aNum substringWithRange:NSMakeRange(i,1)]];
}
NSLog(@"- %@", mArr);
[self compareNum:mArr];
NSLog(@"%@",mArr);
}
//比較是否相等
-(NSMutableArray *)compareNum:(NSMutableArray *)mArr
{
int count = mArr.count;//重新定義了,count不會減一
for (int j = 0; j < count - 1; j++)
{
for (int i = j; i < count - 1-1-1; i++)
{
NSLog(@" %@? %@",[mArr objectAtIndex:j],[mArr objectAtIndex:i + 2]);
NSString *a = [mArr objectAtIndex:j];
NSString *b = [mArr objectAtIndex:i+2];
if ([a isEqualToString:b])
{
[mArr replaceObjectAtIndex:i + 2 withObject:@" "];
}
}
}
return mArr;
}
獲取一臺設備唯一標識的方法有哪些?MAC地址(物理地址):現在已經被廢棄, 所有的設備請求返回同一個地址: 20.00.00.00
UDID: 設備唯一標識符, 蘋果禁止使用UDID的APP上架. ? ? DeviceToken: 推送令牌, 用戶可以禁止推送, 所有不能使用, 這個開發(fā)者根本就沒有用過…
idfa, 廣告標識符, 用戶可以手動還原.
idfv, 只有相同廠商的APP, 這個標識符才會相同.并且在刪除以后, idfv會更新.
UUID, 通用唯一標識碼.
-(NSString*)?uuid?{
CFUUIDRef?puuid?=?CFUUIDCreate(?nil?);
CFStringRef?uuidString?=?CFUUIDCreateString(?nil,?puuid?);
NSString?*?result?=?(NSString?*)CFStringCreateCopy(?NULL,?uuidString);
CFRelease(puuid);
CFRelease(uuidString);
return?[result?autorelease];
}
open UDID, 一個開源的獲取唯一標示的第三方.建議配合Keychain使用.
iOS類是否可以多繼承唇跨?如果沒有稠通,那可以用其他方法實現嗎礁遵?簡述實現過程。不可以采记,可以通過消息轉發(fā)佣耐、delegate和protocol和類別來實現類似多繼承。
堆和棧的區(qū)別唧龄?棧區(qū)(stack)--由編譯器自動分配釋放兼砖,存放函數的參數值、局部變量的值既棺。先進后出堆區(qū)(heap)--一般由程序員分配釋放讽挟。先進先出全局區(qū)(靜態(tài)區(qū))(static)--全局變量和靜態(tài)變量。程序結束后由系統(tǒng)釋放丸冕。
文字常量區(qū)--常量字符串存放在這里耽梅。程序結束后由系統(tǒng)釋放。 ? ? ? 程序代碼區(qū)—存放函數體的二進制文件胖烛。
iOS本地數據存儲都有哪幾種方式眼姐?iOS如何實現復雜對象的存儲?
Write寫入方式:永久保存在磁盤中佩番。但是只支持NSString众旗、NSData、NSArray趟畏、NSDictionary贡歧。
NSKeyedArchiver(歸檔)采用歸檔的形式來保存數據,該數據對象需要遵守NSCoding協議赋秀,并且該對象對應的類必須提供encodeWithCoder:和initWithCoder:方法利朵。
SQLite(FMDB)注意FMDB不是數據庫, 而是一個SQLITE管理框架.
CoreData切記coredata不是數據庫, 他的存儲核心思想是托管對象, 只是咱們經常用的存儲文件為SQLite.還可以用XML, 二進制等方式.
iOS的動態(tài)性? ? 1。動態(tài)類型猎莲。 如id類型绍弟。實際上靜態(tài)類型因為其固定性和可預知性而使用得更加廣泛。靜態(tài)類型是強類型益眉,而動態(tài)類型屬于弱類型晌柬。運行時決定接收者姥份。2郭脂。 動態(tài)綁定。讓代碼在運行時判斷需要調用什么方法澈歉,而不是在編譯時展鸡。與其他面向對象語言一樣,方法調用和代碼并沒有在編譯時連接在一起埃难,而是在消息發(fā)送時才進行連接莹弊。運行時決定調用哪個方法涤久。3。 動態(tài)載入忍弛。讓程序在運行時添加代碼模塊以及其他資源响迂。用戶可以根據需要加載一些可執(zhí)行代碼和資源,而不是在啟動時就加載所有組件细疚≌嵬可執(zhí)行代碼中可以含有和程序運行時整合的新類。