iOS 面試題:OC基本概念題
1.什麼是類和對象?
類是一組具有相同特徵和功能的事物的抽象
對象描述了一個物體的特徵和行為實現
類是對象的抽象 對象是類的執行個體
2.OC中定義類,建立對象,使用對象.
OC中定義類分為介面部分,實現部分
介面部分:對外聲明類的特徵和行為
實現部分:實現方法,即類的行為實現
建立對象需要進行分配記憶體空間和初始
3.聲明方法,根據需求.區分:方法聲明,方法實現,方法執行
4.繼承.繼承的所有特點
子類可以繼承父類所有的聲明的方法和除私人的以外執行個體變數
父類不能使用子類所建立的方法和執行個體變數
5.self和super
self 給對象發送訊息 執行該類的方法
super 給對象發送訊息 執行父類的方法
6.初始化方法.會根據需求自訂,能夠寫出完整的實現
例: - (id) initWithName:(NSString *)name
sex:(NSString *)sex
age:(int)age
{
self = [super init];
if(self)
{
self.name = name;
self.sex = sex;
_age = age
}
return self;
}
7.執行個體變數的可見度,以及各自的特點,預設可見度是什麼?
如何在類的外部,操作預設可見度的執行個體變數.
@public 公有的
@protected 保護的(預設的)
@private 私人的
在類的外部,操作預設可見度的執行個體變數 可以定義執行個體變數的屬性,也可以聲明和實現setter和getter方法
8.什麼是setter,getter方法,如何聲明?
設定器 - (void) setName:(NSString *)name
訪問器 - (NSString *) name;
9.屬性的作用.如何聲明屬性,如何?屬性(聲明和實現所對應的關鍵字)
作用:提供外部存取 自動產生setter和getter方法
@propert (屬性的屬性) 返回值或參數類型 屬性的名字
@synthesize 屬性的名字 = 執行個體變數
10.屬性的三個特性?沒有特性都有哪些內容,使用情境,特點作用
讀寫設定:readonly(唯讀) readwrite(預設)
語義設定: assign(預設 既可以修飾基礎資料型別 (Elementary Data Type)還可以修飾對象)
retain(修飾對象)
copy(修飾對象 並且所修飾的對象要遵守<NSCopying>協議)
原子性:noatomic(不能保證多安全執行緒)
atomic(預設 保證多安全執行緒)
11.屬性的setter和getter方法的內部實現
用retain修飾
(void) setName:(NSString *)name
{
if(_name != name)
{
[_name release];
_name = [name retain];
}
}
(NSString *) name
{
return [[_name retain] autorelease];
}
12.類的擴充.(類目 延展 協議(一對方法)).代理(執行協議裡方法的對象)
類目(category):為沒有原始碼的類添加方法 沒有執行個體變數
類目的聲明: @interface 類的名字 (類目的名字)
@end
類目的實現: @implementation 類的名字
@end
注:類目的方法若與類的方法相同 類目的方法優先順序高
延展(extention):(匿名類目)管理”私人”方法 寫在.m檔案中 可以有執行個體變數
延展的聲明:@interface 類的名字 ()
@end
注:聲明在延展裡的方法必須實現
協議(protocol):沒有方法實現 只有方法聲明 只有.h檔案
預設關鍵字@require 必須實現 @optionol 可以不實現
協議的聲明:@protocol 協議的名字 <NSobject>
注:一個類可以接受多個協議,在< >中用”,”分隔開.用協議可以實現多繼承
13.foundation(架構).NSString,NSArray,NSDictionary,NSSet(對象的內容互異).(區分可變和不可變,建立對象,常用方法,類的特點)
NSString 不可變(自身)
命名規則
NSString
第一,建立 initWithFormat或者stringWithFormat
第二,求字串長度 length
第三,判斷字串是否相等 isEqualToString
第四,字串替換 stringByReplacingOccurrenceOfString:withString:
第五,字串比較 compare 返回值枚舉
第六,字串拼接 stringByAppendingFormat
第七,求字元 substringFromlndex
第八,查詢字串 rangeOfString
第九,首碼,尾碼 hasPrefix hasSuffix
第十,字母大寫 uppercaseString
NSMutableString 可變字串
第一,建立 使用父類繼承的方法或者使用自己的建立方法 initWithCapacity
第二, 增 appendFormat: ///////////
第三, 刪 deleteCharacterslnRange:
第四, 改 replaceCharacterslnRange:
第五, 查 insertString:atlndex: /////////////////
NSArray 容器 只能儲存物件(繼承自NSObject的類) 不可變的數組 不能添加 不能刪除,不能修改,
第一,建立 initWithObjects: arrayWithObjects:
第二,看元素 ,objectAtIndex:
第三,數組個數, [array count]
NSMutableArray 可變字串
第一,增(添加), addObject
第二,刪 removeObjectAtIndex: removeObject removeAllObjects
第三,插入 insertObject: atIndex:
第四,替換 replaceObjectAtlndex: withObject:
第五,交換 exchangeObjectAtIndex:(目的串) withObjectAtIndex:(來源串)
NSValue , NSNumber 容器,轉換作用
NSValue 轉換結構體為對象
NSNumber 轉換基礎資料型別 (Elementary Data Type)為對象
14.記憶體管理
對記憶體管理的理解:
對象所有權:通過retain alloc copy 是對象的引用計數加1
記憶體泄露:只分配使用了一塊記憶體,沒有釋放
過度釋放:釋放多次
野指標:指標指向不存在的對象