基礎(chǔ)筆試題集錦(一)

基礎(chǔ)的東西往往很容易被忽視,但是,越到后面會(huì)發(fā)現(xiàn)越重要,所謂地基。

1 請談?wù)勀銓γ嫦驅(qū)ο缶幊痰睦斫猓?/h6>
2 OC中是否私有方法和私有成員變量?
3 Object-c的類可以多重繼承么? 可以實(shí)現(xiàn)多個(gè)接口么?
4#import 跟#include 有什么區(qū)別,@class呢, #import<> #import”有什么區(qū)別?
5全局變量,局部變量,成員變量(實(shí)例變量/屬性)的區(qū)別?
6如何聲明一個(gè)delegate屬性,為什么?
7常見的object-c的數(shù)據(jù)類型有那些, 和C的基本數(shù)據(jù)類型有什么區(qū)別?
8 OC中id、NSObject *、instancetype的區(qū)別?
9 OC中是否支持垃圾回收機(jī)制?

1 請談?wù)勀銓γ嫦驅(qū)ο缶幊痰睦斫猓?/h5>

面向?qū)ο缶幊痰母拍钍谴笠粚W(xué)C++知道的,而與之對應(yīng)的就是C語言面向過程的編程語言。找了一下資料整理一下。

(1)什么是面向?qū)ο缶幊?

a programming paradigm that uses "objects" – data structures consisting of datafields and methods together with their interactions – to design applications and computer programs.(Wikipedia)

是一種編程范式, 它將對象作為問題空間的基本元素, 利用對象和對象之間的相互作用來設(shè)計(jì)程序.

(2)三大特性(在OC里面的體現(xiàn))
  • 封裝:類:類就是封裝了數(shù)據(jù)和方法
  • 繼承:繼承父類所有的屬性和方法 比如UITableView 繼承UIScrollView 的所有屬性和方法,包括代理方法。
  • 多態(tài):(Polymorphism)
    多態(tài)的普通定義來源于它的希臘詞根 – “Poly” 表示很多, “Morph” 表示形式。
    在計(jì)算機(jī)科學(xué)中,這個(gè)詞有特別的定義,依據(jù) Free Online Dictionary of Computing網(wǎng)站的解釋:一個(gè)變量,它在可能指向一個(gè)對象,這個(gè)對象的類在編譯時(shí)還未知,但是會(huì)在運(yùn)行時(shí)根據(jù)實(shí)際指向的類執(zhí)行相應(yīng)的反饋。
    這些定義最終可以歸結(jié)為“一個(gè)對象同時(shí)可以成為不同的事物”。
2 OC中是否私有方法和私有成員變量?

先表明下觀點(diǎn):沒有絕對的私有變量和方法。
如果要聲明私有方法和私有變量,可以在.m文件里面的匿名類別中聲明,從而使方法和變量在該類中使用,不暴露在外部。

3 Object-c的類可以多重繼承么? 可以實(shí)現(xiàn)多個(gè)接口么?

Object-c的類不可以多重繼承,可以用代理和協(xié)議實(shí)現(xiàn)多重繼承。 可以實(shí)現(xiàn)多個(gè)接口,通過實(shí)現(xiàn)多個(gè)接口。

4#import 跟#include 有什么區(qū)別,@class呢, #import<> #import”有什么區(qū)別?
 #import是Objective-C導(dǎo)入頭文件的關(guān)鍵字, 可以避免文件重復(fù)導(dǎo)入,相當(dāng)于#include和#pragma once。
 #include是C/C++導(dǎo)入頭文件的關(guān)鍵字,無法避免文件重復(fù)導(dǎo)入。
 @class簡易聲明某個(gè)類,當(dāng)執(zhí)行時(shí),才去查看類.m文件。
 #import<>用來包含系統(tǒng)的頭文件帶靜態(tài)庫的文件。
 #import用來包含非帶靜態(tài)庫的文件,也就是一般情況下自己創(chuàng)建的文件。
5全局變量,局部變量,成員變量(實(shí)例變量/屬性)的區(qū)別?

變量 聲明 存儲(chǔ)空間 作用域
全局變量: 方法體外 數(shù)據(jù)區(qū) 整個(gè)類中
局部變量: 方法體內(nèi) 棧區(qū) 函數(shù)體內(nèi)
成員變量: @property 堆區(qū)

注意:作用域,生命周期 是不同的。
實(shí)參,形參問題。

6如何聲明一個(gè)delegate屬性,為什么?

聲明屬性的時(shí)候,在ACR下使用weak,在MRC下使用assign。二者都是為了防止循環(huán)引用。

 @property(nonatomic,weak)id<CustomViewDelegate>delegate;
7常見的object-c的數(shù)據(jù)類型有那些, 和C的基本數(shù)據(jù)類型有什么區(qū)別?

Objective-c的數(shù)據(jù)類型有NSArray,NSDictionary,NSData,NSNumber等,這些都是class.創(chuàng)建后便是對象而C語言的基本數(shù)據(jù)類型int,只是一定字節(jié)的內(nèi)存空間,用于存放數(shù)值. NSInteger是基本數(shù)據(jù)類型,并不是NSNumber的子類,當(dāng)然也不是NSObject的子類。 NSInteger是基本數(shù)據(jù)類型Int或者Long的別名(NSInteger的定義typedef long NSInteger)。它的區(qū)別在于,NSInteger會(huì)根據(jù)系統(tǒng)是32位還是64位來決定是本身是int還是long.

8 OC中id、NSObject *、instancetype的區(qū)別?
  • NSObject *

NSObject確定對象類型是繼承于NSObject。很常用。

  • id
    可以指向任意類型的objcetive-c的對象,聲明的對象具有運(yùn)行時(shí)的特性。并不一定是NSObject對象。對于一些不能進(jìn)行類型檢查或者不想檢查的地方,可以使用id,經(jīng)常會(huì)聲明delegate為id類型,在運(yùn)行的時(shí)候載使用respondToSelector:檢查。
  • instancetype
    stack overflow上面所說:“Use instancetype whenever it's appropriate, which is whenever aclass returns an instance of that same class.”
    在instancetype有效的情況下,應(yīng)該盡量去使用instancetype。
9 OC中是否支持垃圾回收機(jī)制?

OC語言有垃圾回收機(jī)制,是在0c2.0引入的。但是iOS平臺(tái)不支持。iOS開發(fā)只支持手動(dòng)內(nèi)存管理與ARC,Mac開發(fā)支持GC垃圾回收機(jī)制,10.8之后棄用了GC,推薦使用ARC。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容