
基礎(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。