基礎(chǔ)的東西往往很容易被忽視,但是,越到后面會(huì)發(fā)現(xiàn)越重要窘拯,所謂地基。
1 請(qǐng)談?wù)勀銓?duì)面向?qū)ο缶幊痰睦斫猓?/h6>
2 OC中是否私有方法和私有成員變量坝茎?
3 Object-c的類(lèi)可以多重繼承么? 可以實(shí)現(xiàn)多個(gè)接口么?
4#import 跟#include 有什么區(qū)別涤姊,@class呢, #import<> #import”有什么區(qū)別?
5全局變量,局部變量嗤放,成員變量(實(shí)例變量/屬性)的區(qū)別思喊?
6如何聲明一個(gè)delegate屬性,為什么次酌?
7常見(jiàn)的object-c的數(shù)據(jù)類(lèi)型有那些恨课, 和C的基本數(shù)據(jù)類(lèi)型有什么區(qū)別?
8 OC中id岳服、NSObject *剂公、instancetype的區(qū)別?
9 OC中是否支持垃圾回收機(jī)制吊宋?
1 請(qǐng)談?wù)勀銓?duì)面向?qū)ο缶幊痰睦斫猓?/h5>
面向?qū)ο缶幊痰母拍钍谴笠粚W(xué)C++知道的纲辽,而與之對(duì)應(yīng)的就是C語(yǔ)言面向過(guò)程的編程語(yǔ)言。找了一下資料整理一下璃搜。
(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)
是一種編程范式, 它將對(duì)象作為問(wèn)題空間的基本元素, 利用對(duì)象和對(duì)象之間的相互作用來(lái)設(shè)計(jì)程序.
(2)三大特性(在OC里面的體現(xiàn))
- 封裝:類(lèi):類(lèi)就是封裝了數(shù)據(jù)和方法
- 繼承:繼承父類(lèi)所有的屬性和方法 比如UITableView 繼承UIScrollView 的所有屬性和方法拖吼,包括代理方法。
- 多態(tài):(Polymorphism)
多態(tài)的普通定義來(lái)源于它的希臘詞根 – “Poly” 表示很多这吻, “Morph” 表示形式吊档。
在計(jì)算機(jī)科學(xué)中,這個(gè)詞有特別的定義唾糯,依據(jù) Free Online Dictionary of Computing網(wǎng)站的解釋?zhuān)阂粋€(gè)變量怠硼,它在可能指向一個(gè)對(duì)象,這個(gè)對(duì)象的類(lèi)在編譯時(shí)還未知移怯,但是會(huì)在運(yùn)行時(shí)根據(jù)實(shí)際指向的類(lèi)執(zhí)行相應(yīng)的反饋拒名。
這些定義最終可以歸結(jié)為“一個(gè)對(duì)象同時(shí)可以成為不同的事物”。
2 OC中是否私有方法和私有成員變量芋酌?
先表明下觀(guān)點(diǎn):沒(méi)有絕對(duì)的私有變量和方法。
如果要聲明私有方法和私有變量雁佳,可以在.m文件里面的匿名類(lèi)別中聲明脐帝,從而使方法和變量在該類(lèi)中使用同云,不暴露在外部。
3 Object-c的類(lèi)可以多重繼承么? 可以實(shí)現(xiàn)多個(gè)接口么?
Object-c的類(lèi)不可以多重繼承堵腹,可以用代理和協(xié)議實(shí)現(xiàn)多重繼承炸站。 可以實(shí)現(xiàn)多個(gè)接口,通過(guò)實(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)鍵字,無(wú)法避免文件重復(fù)導(dǎo)入。
@class簡(jiǎn)易聲明某個(gè)類(lèi)笆檀,當(dāng)執(zhí)行時(shí)忌堂,才去查看類(lèi).m文件。
#import<>用來(lái)包含系統(tǒng)的頭文件帶靜態(tài)庫(kù)的文件酗洒。
#import用來(lái)包含非帶靜態(tài)庫(kù)的文件士修,也就是一般情況下自己創(chuàng)建的文件。
5全局變量樱衷,局部變量棋嘲,成員變量(實(shí)例變量/屬性)的區(qū)別?
變量 聲明 存儲(chǔ)空間 作用域
全局變量: 方法體外 數(shù)據(jù)區(qū) 整個(gè)類(lèi)中
局部變量: 方法體內(nèi) 棧區(qū) 函數(shù)體內(nèi)
成員變量: @property 堆區(qū)
注意:作用域矩桂,生命周期 是不同的沸移。
實(shí)參,形參問(wèn)題耍鬓。
6如何聲明一個(gè)delegate屬性阔籽,為什么?
聲明屬性的時(shí)候牲蜀,在A(yíng)CR下使用weak笆制,在MRC下使用assign。二者都是為了防止循環(huán)引用涣达。
@property(nonatomic,weak)id<CustomViewDelegate>delegate;
7常見(jiàn)的object-c的數(shù)據(jù)類(lèi)型有那些在辆, 和C的基本數(shù)據(jù)類(lèi)型有什么區(qū)別?
Objective-c的數(shù)據(jù)類(lèi)型有NSArray度苔,NSDictionary,NSData,NSNumber等匆篓,這些都是class.創(chuàng)建后便是對(duì)象而C語(yǔ)言的基本數(shù)據(jù)類(lèi)型int,只是一定字節(jié)的內(nèi)存空間寇窑,用于存放數(shù)值. NSInteger是基本數(shù)據(jù)類(lèi)型鸦概,并不是NSNumber的子類(lèi),當(dāng)然也不是NSObject的子類(lèi)甩骏。 NSInteger是基本數(shù)據(jù)類(lèi)型Int或者Long的別名(NSInteger的定義typedef long NSInteger)窗市。它的區(qū)別在于先慷,NSInteger會(huì)根據(jù)系統(tǒng)是32位還是64位來(lái)決定是本身是int還是long.
8 OC中id、NSObject *咨察、instancetype的區(qū)別论熙?
- NSObject *
NSObject確定對(duì)象類(lèi)型是繼承于NSObject。很常用摄狱。
- id
可以指向任意類(lèi)型的objcetive-c的對(duì)象脓诡,聲明的對(duì)象具有運(yùn)行時(shí)的特性。并不一定是NSObject對(duì)象媒役。對(duì)于一些不能進(jìn)行類(lèi)型檢查或者不想檢查的地方祝谚,可以使用id,經(jīng)常會(huì)聲明delegate為id類(lèi)型刊愚,在運(yùn)行的時(shí)候載使用respondToSelector:檢查踊跟。 - instancetype
stack overflow上面所說(shuō):“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語(yǔ)言有垃圾回收機(jī)制,是在0c2.0引入的牡借。但是iOS平臺(tái)不支持拳昌。iOS開(kāi)發(fā)只支持手動(dòng)內(nèi)存管理與ARC,Mac開(kāi)發(fā)支持GC垃圾回收機(jī)制钠龙,10.8之后棄用了GC炬藤,推薦使用ARC。