Format:樣式,格式(1、將非(NSString*)類型的變量轉(zhuǎn)化成(NSString*)類型 2、打印字符串需要添加※號(hào)或斜杠這種字符)
uppercase:大寫
lowercase:小寫
capitalized:首字母大寫
character:字符,符號(hào)
Index:索引
exchangeObject:數(shù)組中元素位置交換
UTF8String:二進(jìn)制與OC轉(zhuǎn)化
description:描述
sub:提取
default:單例
alloc:分配空間
Directory:文件夾
Item: 文件
file:文件
data:數(shù)據(jù)
encoding:編譯編碼
48~57 對(duì)應(yīng)數(shù)字 1~9
65~90 對(duì)應(yīng)字母 A~Z
97~122 對(duì)應(yīng)字母 a~z
空指針:NULL
空變量:nil
[NSString stringWithString:str]:類方法
繼承:父類具有的屬性及方法子類直接獲得,稱為繼承。
派生:子類從父類的基礎(chǔ)上衍生出的新的屬性及方法,稱為派生
代碼編寫
①重寫父類方法,不需要在.h里重復(fù)聲明,在.m直接調(diào)用即可
②在真正的開發(fā)中,更需要保留父類的方法,在父類方法的基礎(chǔ)上添加新的功能。在新功能前添加[super方法名];
③衍生出新的方法及屬性
[superrun]:super表示父類所創(chuàng)建的對(duì)象
[selfswim]: self表示一個(gè)屬于所處類的具體對(duì)象
Father* father1 = [Sonalloc]:father1只是一個(gè)指針,[Sonalloc]才是真正從內(nèi)存中創(chuàng)建得用于存放成員變量的對(duì)象
[father1run]:father1這個(gè)指針?biāo)傅膶?duì)象終究屬于為她開辟空間的類,而不是創(chuàng)建她的類
變量的出生兩種方式1、變量類型聲明 2、屬性定義 前者出生的變量值無法在外函數(shù)使用,而后者可以,但無法在子類中使用
SELsel =@selector(crash)/(crashWithPeople:)/(setArg:):將《crash無參數(shù)的方法》或《crashWithPeople:有參數(shù)的方法》或《有多個(gè)參數(shù)的方式》存入剛聲明的sel選擇器中
[blackManrespondsToSelector:sel] == YES:判斷對(duì)象是否具備選擇器中的方法
[blackManperformSelector:sel]:對(duì)象執(zhí)行選擇器中的無參數(shù)的方法
[blackManperformSelector:selwithObject:@"kaka”]:對(duì)象執(zhí)行選擇器中的輸入?yún)?shù)為kaka的方法
如果只有輸入一個(gè)參數(shù)的入口而實(shí)際情況需要輸入多個(gè)參數(shù),那么這個(gè)參數(shù)可以是一個(gè)對(duì)象,每一個(gè)成員變量包含一個(gè)參數(shù),用函數(shù)方法將每個(gè)參數(shù)的值賦給相應(yīng)的成員變量,然后在這個(gè)多參數(shù)轉(zhuǎn)換成單參數(shù),只不過這個(gè)參數(shù)是對(duì)象而不是具體的字符串。說白了,就是先把本該直接賦給方法的多個(gè)參數(shù)的值先用對(duì)象初始化的方式進(jìn)行接收,再通過以對(duì)象為參數(shù)的單參數(shù)方法里調(diào)用賦值函數(shù)將對(duì)象里成員變量接收到的值賦給需要的多個(gè)參數(shù)。通過對(duì)象傳遞多參數(shù)
問題在于如何把對(duì)象的成員變量值傳遞到每一個(gè)參數(shù)上得賦值函數(shù):
- (void)setName:(NSString*)name AndPhoneNumber:(int)phoneNumber AndAge:(int)age
{
_name= name;
_phoneNumber= phoneNumber;
_age= age;
}
存入選擇器中的方法也可以后期從終端進(jìn)行輸入:
c語言接收方法名字符串—>字符串 C轉(zhuǎn)OC(UTF)—>存入選擇器—>判斷調(diào)用
SELsel2 =NSSelectorFromString(str);
父類里的成員變量以屬性的形式聲明,就得用self的方法才能在子類中調(diào)用,同時(shí)父類中一定會(huì)有構(gòu)造方法對(duì)成員變量進(jìn)行初始化。
APP中對(duì)輸入的字符串進(jìn)行判斷、轉(zhuǎn)換和提???
BOOLret = [str1isEqualToString:str2];
NSComparisonResultret = [str1compare:str2];
NSComparisonResultret = [str1caseInsensitiveCompare:str2]; (注意:這里字符串不區(qū)分大小寫,驗(yàn)證碼就這種)
[strhasPrefix:前綴]
[strhasSuffix:后綴]
[strintValue/floatValue/integerValue]:字符串轉(zhuǎn)換成整型、浮點(diǎn)型、無符號(hào)長整型
NSString* str = [NSStringstringWithFormat:@"%d",a]其它類型轉(zhuǎn)到字符串,尤其適用于九九乘法表
NSNumber * intNumber = [NSNumber numberWithInt:10];
NSNumber * floatNumber = [NSNumber numberWithFloat:3.14];
[@8isEqualToNumber:@4]
[@6compare:@4.5]
NSString* str = [[NSStringalloc]initWithUTF8String:arr];C語言字符串轉(zhuǎn)OC字符串
constchar* p = [str UTF8String] OC字符串轉(zhuǎn)C字符串
NSComparisonResultret = [str1compare:str2]字符串1減去字符串2
NSRangerange = [str1rangeOfString:@“確定字符”]:獲取確定單詞在字符串中的起始位置和終止位置
NSRangerange = NSMakeRange(range.location,range.length)
NSRange Range = {range.location,range.length};
APP中對(duì)漢字串中的某個(gè)特定漢字進(jìn)行提???
NSRangerange = {i,1};
NSString* str = [arabicsubstringWithRange:range];
char a= [strcharacterAtIndex:i]
APP中對(duì)字符串進(jìn)行編輯?
setString
appendString(僅限字符串)、appendFormat(多類型)
componentsSeparatedByString:@“分隔符”
NSCharacterSet* set = [NSCharacterSetcharacterSetWithCharactersInString:@“多個(gè)分隔符,無需逗號(hào)隔開”]
[strcomponentsSeparatedByCharactersInSet:set]
[arraycomponentsJoinedByString:@“連接符”]
replaceCharactersInRange:rangewithString
insertString
deleteCharactersInRange:range
NSString* str2 = [str1 stringByAppendingString:@“”]:不可變字符串增加字符串
APP中對(duì)數(shù)組進(jìn)行操作?
exchangeObject: 交換數(shù)組元素位置
[[NSArrayalloc]initWithObjects:@"abc",@"def",nil]:數(shù)組初始化賦值
for(idobjectinarray):數(shù)組對(duì)象遍歷
[objectisKindOfClass:[SeaRobberclass]] ==YES :判斷數(shù)組中的對(duì)象到底屬于哪一類
NSMutableArray* array3 = [[NSMutableArrayalloc]initWithArray:array]:將不可變數(shù)組轉(zhuǎn)化成可變數(shù)組
removeObject:@“”刪除空字符
addObject增加對(duì)象
replaceObjectAtIndex:0withObject:@"小麗”: 替換對(duì)象
insertObject:@"老王"atIndex:1: 插入對(duì)象
exchangeObjectAtIndex:0withObjectAtIndex:1:改變對(duì)象
APP中用字典開發(fā)通訊錄?
NSDictionary* dict =[[NSDictionaryalloc]initWithObjects:@[@"",@""]forKeys:@[@"",@""]];
NSMutableDictionary* dict = [[NSMutableDictionaryalloc]initWithObjects:@[@"",@"",@""]forKeys:@[@"",@"",@""]];
NSDictionary* dict =@{@"6":@"six",@"7":@"seven"};
allValues/allKeys:找到字典的所有值或鍵
setObject:@""forKey:@"81”:增加/修改
setDictionary:@{@"1":@"One”}]:字典重置
removeObjectForKey:@"41”:刪除字典中鍵為41的數(shù)組
removeAllObjects:刪除所有名片(清空)
通訊錄類存名片數(shù)量:[dict count]
APP中“菜單”按鈕用SEL選擇器實(shí)現(xiàn)?
SELsel =@selector(crash)無參數(shù)或單雙參數(shù)的方法直接存入(帶參數(shù)的方法后面必須有冒號(hào))
SELsel =@selector(setArg:)創(chuàng)建Arg類的對(duì)象和setArg:(Arg*)arg賦值給對(duì)象的函數(shù),冒號(hào)不能少
[對(duì)象respondsToSelector:sel2]判斷
[對(duì)象performSelector:sel]執(zhí)行
[對(duì)象performSelector:selwithObject:@“參數(shù)”]帶參執(zhí)行
- (void)setName:(NSString*)name AndPhoneNumber:(int)phoneNumber AndAge:(int)age{
_name= name;
_phoneNumber= phoneNumber;
_age= age;
}
- (void)setArg:(Arg*)arg{
[selfsetName:arg.nameAndPhoneNumber:arg.phoneNumberAndAge:arg.age];
NSLog(@"%@%d%d",arg.name,arg.phoneNumber,arg.age);
}
從終端輸入方法名字符串的情況
charbuf[10] = {};
scanf("%s",buf);
NSString* str = [[NSStringalloc]initWithUTF8String:buf];
SELsel2 =NSSelectorFromString(str);
APP通過“繼承”為調(diào)用的官方或第三方類添加更適合當(dāng)前項(xiàng)目的方法和屬性?
APP中提取網(wǎng)絡(luò)時(shí)間?
NSDate:時(shí)間類(創(chuàng)建的對(duì)象就是時(shí)間,返回時(shí)間的格式)
[NSDatedate]
NStimeInterval:時(shí)間變量類(創(chuàng)建的對(duì)象是sec-秒)
[datetimeIntervalSinceNow]:返回date時(shí)間距離現(xiàn)在多少秒
[現(xiàn)在timeIntervalSinceDate:出生]:返回現(xiàn)在我已近活了多少秒
NSTimeZone:時(shí)間時(shí)區(qū)類
NSTimeZone* timeZone = [NSTimeZonesystemTimeZone]:當(dāng)前系統(tǒng)時(shí)區(qū)
NSDictionary* dict = [NSTimeZoneabbreviationDictionary]:字典存入所有時(shí)區(qū)
NSDateFormatter:時(shí)間戳類,可以通過它改變返回的時(shí)間的格式
NSDateFormatter* formatter = [[NSDateFormatteralloc]init];
formatter.dateFormat=@"yyyy年MM月dd日HH時(shí)mm分ss.S秒";
formatter.timeZone= [NSTimeZonetimeZoneWithAbbreviation:@"HKT"];
NSDate* date = [NSDatedate];//獲得當(dāng)前時(shí)間
NSLog(@"%@",[formatterstringFromDate:date]);
APP設(shè)置鬧鐘?
NSTimer:定時(shí)器類
NSDate* endDate = [NSDatedateWithTimeIntervalSinceNow:3600]:鬧鐘設(shè)在3600秒后
NSData創(chuàng)建的對(duì)象默認(rèn)的格式是:@"2015-06-12 08:55:25 +0000"
現(xiàn)在的時(shí)間與設(shè)定的時(shí)間進(jìn)行比較:
if(date.timeIntervalSinceReferenceDate> endDate.timeIntervalSinceReferenceDate)
sleep(1);在While的循環(huán)里每隔多少秒循環(huán)判斷一次
APP顯示文件夾里的內(nèi)容路徑?
NSFileManager:文件管理類
[NSFileManagerdefaultManager]:對(duì)象初始化
contents:只查找指定路徑下面的一層文件路徑
subpaths:查找指定路徑的下層所有文件路徑
hasSuffix:有后綴
hasPrefix:有前綴
APP中做文件的緩存,就像微博,在無網(wǎng)絡(luò)的情況都能刷出已近刷出來得內(nèi)容?
1、新建文件?
NSFileManager:文件管理類
[NSFileManagerdefaultManager]:對(duì)象初始化
fileExists:判斷文件是否存在
createFile:創(chuàng)建文件(路徑,內(nèi)容,屬性)
attributesOfItem:獲取文件屬性(用字典接收)
dict[@"NSFileSize”]:文件大小
2、文件編輯?
NSFileManager:文件管理類
[NSFileManagerdefaultManager]:對(duì)象初始化
moveItem/removeItem/copyItem
3、文件讀寫?
NSFileHandle:文件句柄類
[NSFileHandlefileHandleForReadingAtPath:路徑]:對(duì)象初始化
NSData:數(shù)據(jù)類
NSString:字符串類
Data encoding:數(shù)據(jù)轉(zhuǎn)字符串
dataUsingEncoding:字符串轉(zhuǎn)數(shù)據(jù)
NSUTF8StringEncoding:二進(jìn)制與OC
readDataOfLength:閱讀指定長度的字節(jié)數(shù)據(jù)
seekToFileOffset:指定位置讀取字節(jié)
synchronizeFile:文件立即同步
APP中存儲(chǔ)固定數(shù)據(jù)?(存儲(chǔ)的plist文件是什么結(jié)構(gòu)就用什么類)
1、官方類創(chuàng)建的對(duì)象(plist)(自定義類型的數(shù)據(jù)無法存儲(chǔ),通常存儲(chǔ)長時(shí)間不變的數(shù)據(jù))
NSDictionary:字典類(字典鍵對(duì)應(yīng)的值可以是數(shù)組名)
writeToFile(路徑字符串)atomically:YES生成plist文件
dictionaryWithContentsOfFile:解析plist文件
new file—>resource—>property list以程序的方法進(jìn)行設(shè)置
2、自定義類創(chuàng)建的對(duì)象(歸檔)
[NSKeyedArchiver archiveRootObject:指針toFile:路徑]:對(duì)象歸檔
[NSKeyedUnarchiverunarchiveObjectWithFile:路徑]:對(duì)象解檔,檔里是啥類型,就用什么類型創(chuàng)建的對(duì)象進(jìn)行接收,且在等號(hào)后加一個(gè)(類名*)避免出錯(cuò)
NSObject//遵守歸檔的協(xié)議
//歸檔自定義對(duì)象時(shí)調(diào)用
-(void)encodeWithCoder:(NSCoder*)aCoder
{
[aCoderencodeInt:self.ageforKey:@"AGE"];
[aCoderencodeObject:self.nameforKey:@"NAME"];
}
//解檔自定義對(duì)象時(shí)調(diào)用
-(instancetype)initWithCoder:(NSCoder*)aDecoder{
if(self= [superinit])
{
self.age= [aDecoderdecodeIntForKey:@"AGE"];
self.name= [aDecoderdecodeObjectForKey:@"NAME"];
}
returnself;
}
APP中的賬號(hào)和密碼存儲(chǔ)及不同界面?zhèn)髦担?
NSUserDefaults:用戶單例類
[NSUserDefaultsstandardUserDefaults]:對(duì)象初始化
setObject:值forKey:鍵 :增加鍵和值
synchronize:及時(shí)同步
objectForKey:鍵 :取鍵對(duì)應(yīng)的值,用字符串對(duì)象接收
removeObjectForKey:鍵 :刪除鍵和鍵對(duì)應(yīng)的值
APP通過Json格式與服務(wù)器端進(jìn)行數(shù)據(jù)交換?
1、本地File路徑
//宏定義JSON文件路徑位置
#define PATH @“路徑”
//Json文件轉(zhuǎn)化成字符串
NSString* str = [NSStringstringWithContentsOfFile:PATHencoding:NSUTF8StringEncodingerror:&error];
//字符串放入緩沖區(qū)轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)
NSData* data = [strdataUsingEncoding:NSUTF8StringEncoding];
2、網(wǎng)絡(luò)URL網(wǎng)址
//宏定義JSON網(wǎng)絡(luò)路徑位置
#define URL @“網(wǎng)址”
//將網(wǎng)絡(luò)URL字符串轉(zhuǎn)換為可識(shí)別的網(wǎng)址的格式
NSURL* url = [NSURLURLWithString:URL];
//Json文件轉(zhuǎn)化成字符串(本地是File路徑 網(wǎng)絡(luò)是URL網(wǎng)址)
NSString* str = [NSString stringWithContentsOfURL:urlencoding:NSUTF8StringEncoding error:nil];
3、對(duì)容器的內(nèi)容進(jìn)行特定提?。ㄓ龅綌?shù)組就接收,遇到字典就遍歷)
字典接受Json所有內(nèi)容
NSDictionary* dict = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingMutableContainerserror:nil];
數(shù)組接受字典里的數(shù)組值
NSArray* Array = Dict[@“鍵”]
遍歷數(shù)組里的每一個(gè)字典
for(NSDictionary* Dictin Array)
model對(duì)象接收字典里所有不止一個(gè)鍵的值(model對(duì)象的初始化必須放在數(shù)組的字典遍歷里,否則自動(dòng)覆蓋已存入信息)
[model setValuesForKeysWithDictionary:字典創(chuàng)建的對(duì)象名]://使用它必須model對(duì)象的成員名==鍵的名字
APP中輸入四川省彈出四川所有城市名?
輸入漢字并轉(zhuǎn)化成OC的字符串
chararr[123] = {};
scanf(“%s”,arr);
NSString* str1 = [[NSStringalloc]initWithUTF8String:arr];
漢字是否相等的比較
[str1compare: dict1[@"省"]] ==0 //在元素全是字典的數(shù)組遍歷時(shí),拿字符串與字典特定鍵對(duì)應(yīng)值相比較
([array[i]isEqualToString:str1] ==YES)//先將要比較的字符串通過遍歷的方式加到一個(gè)數(shù)組,for循環(huán)數(shù)組逐個(gè)與從終端輸入的字符串進(jìn)行比較
APP中通過XML格式與服務(wù)器進(jìn)行數(shù)據(jù)交換?
1、Xcode里添加GData文件才能解析XML數(shù)據(jù)
①將路徑/usr/include/libxml2添加到工程的頭文件中
Target->build Settings->search->search paths->header search paths ->點(diǎn)擊加號(hào)添加路徑
②GData運(yùn)行在手動(dòng)內(nèi)存管理下,因?yàn)檎w工程運(yùn)行在自動(dòng)內(nèi)存管理下,所以需要為GData庫添加內(nèi)存管理混編。
Target->build phase- >complie sources->添加-fno-objc-arc
③GData是用libxml這個(gè)系統(tǒng)庫,但該系統(tǒng)庫沒有包含在Foundation庫下,所以需要手動(dòng)添加系統(tǒng)庫。
Target->build phase->Link binary with Libraries->添加libxml2.dylib
2、1 用XML解析(絕對(duì)路徑,從頭到尾)
//XML數(shù)據(jù)轉(zhuǎn)換成字符串
NSString* xml = [NSStringstringWithContentsOfFile:PATHencoding:NSUTF8StringEncodingerror:nil];
GDataXMLDocument* document = [[GDataXMLDocumentalloc]initWithXMLString:xmloptions:0error:nil];
//逐步進(jìn)行解析
根元素:GDataXMLElement* rootEle = [documentrootElement];
子元素:GDataXMLElement* booksEle = (GDataXMLElement*)[rootElechildAtIndex:0];
子元素本質(zhì)就是一個(gè)包含多個(gè)孩子的數(shù)組集合:NSArray* booksArray = [booksElechildren];
遍歷每一個(gè)孩子時(shí),需要先用GDataXMLElement創(chuàng)建一個(gè)對(duì)象才能接收
遍歷:for(GDataXMLElement* bookEleinbooksArray)
初始化化孩子為對(duì)象:GDataXMLElement* summaryEle = [[bookEleelementsForName:@"summary"]firstObject];
2、2用XPATH進(jìn)行解析(相對(duì)路徑)
NSArray* array = [documentnodesForXPath:@"http://book[限制條件]/name|//book[限制條件]/summary"error:nil];
限制條件包括:ID號(hào)、last()、position(<3)、@ID=2、@price
for(GDataXMLElement* eleinarray)NSLog(@"%@",ele.stringValue)
注意:有一種XML文件加密了,叫帶有命名空間的XML文件
NSDictionary* dict =@{@“鍵”:@“值”,@“鍵”:@“值”};//注意:字典添加鍵值對(duì)是大括號(hào),而數(shù)組添加對(duì)象則是中括號(hào)
NSArray* array = [documentnodesForXPath:@"絕對(duì)路徑"namespaces:@"命名空間的字典"error:nil];
注意:@"xmlns:root/xmlns:books/xmlns:book/book:name”才是絕對(duì)路徑,而非@"/root/books/book:name"
APP開發(fā)過程中考慮屬性的線程安全問題?
@property()是一個(gè)屬性訪問聲明,擴(kuò)號(hào)內(nèi)支持以下幾個(gè)屬性:
1、getter=getterName,setter=setterName,設(shè)置setter與getter的方法名
2、readwrite,readonly,設(shè)置可供訪問級(jí)別
3、nonatomic,非原子性訪問,不加同步,多線程并發(fā)訪問會(huì)提高性能。注意,如果不加此屬性,則默認(rèn)是兩個(gè)訪問方法都為原子型事務(wù)訪問。鎖被加到所屬對(duì)象實(shí)例級(jí)
4、atomic原子修飾符,表示線程安全
APP中使用單例的操作?
1、創(chuàng)建一個(gè)普通類和一個(gè)類方法
2、對(duì)類創(chuàng)建的對(duì)象以類方法的形式進(jìn)行初始化
3、類方法就是staticSingleClass* single;//static表示內(nèi)存為這個(gè)類創(chuàng)建的對(duì)象從始至終只分配一次空間
if(single ==nil) single = [[SingleClassalloc]init];
returnsingle;
4、main函數(shù)里類創(chuàng)建的對(duì)象=[類名用來初始化的類方法];
單例對(duì)象地址都是靜態(tài),所以其實(shí)就一個(gè)內(nèi)存地址
App中實(shí)現(xiàn)類別:為官方類添加方法補(bǔ)丁?
也就是在新出現(xiàn)的頭文件和 . m文件中分別一種類封裝的形式進(jìn)行處理!頭文件寫方法名,.m文件寫實(shí)現(xiàn)!類別里可以直接使用官方類的方法和屬性變量,而且添加了類別
OC中有多繼承么?如果沒有該怎么實(shí)現(xiàn)?(協(xié)議代理虛擬實(shí)現(xiàn))
App中做一個(gè)動(dòng)畫?
過去:
1、開啟動(dòng)畫
2、設(shè)置屬性
3、動(dòng)畫結(jié)構(gòu)
現(xiàn)在:
直接調(diào)用一個(gè)封裝好的Block,界面時(shí)體會(huì)更深
App視頻播放緩沖界面的制作?(block的傳值與回調(diào))
1、在視頻播放器類里添加視頻播放方法,方法實(shí)現(xiàn)寫入內(nèi)容為輸出"下載已完成"的Block;
2、在下載器的類里添加下載的方法,只是這個(gè)方法的定義涉及到Block的傳值;(類型+Block名)輸入輸出地類型都寫,中間用(^)隔開;
-(void)downLoadWithBlock:(void(^)(NSString*))videoBlock;
3、在下載器的方法實(shí)現(xiàn)里在下載完成后使用Block;
4、在播放器的實(shí)現(xiàn)方法中創(chuàng)建一個(gè)下載器的對(duì)象調(diào)用下載器里的方法(去類型,留塊名);
5、通過Block的參數(shù)可以把一個(gè)類里地值傳到里一個(gè)類里。界面?zhèn)髦当举|(zhì)就是傳參數(shù);
在ARC自動(dòng)內(nèi)存管理的情況下再通過少量代碼增加MRC手動(dòng)內(nèi)存管理,手機(jī)運(yùn)行App時(shí)盡可能減少內(nèi)存的使用?避免浪費(fèi)用戶的機(jī)器資源?
內(nèi)存管理本質(zhì):管理對(duì)象的引用計(jì)數(shù)(指向?qū)ο罂臻g地址的個(gè)數(shù))
內(nèi)存泄露:內(nèi)存空間使用完畢之后未回收
release和dealloc的區(qū)別?
無直接關(guān)系,只是對(duì)引用計(jì)數(shù)進(jìn)行減一操作
dealloc才是真正釋放內(nèi)存(當(dāng)引用計(jì)數(shù)器為0時(shí)自動(dòng)調(diào)用)
面向?qū)ο蟮谋举|(zhì)在于,對(duì)許多對(duì)象提取出共性放在一起處理。這樣,各式容器的使用就是無可避免的了
將一個(gè)具體的類有手動(dòng)內(nèi)存管理轉(zhuǎn)化成自動(dòng)內(nèi)存管理?(刪除可以刪的所有release手動(dòng)釋放代碼)
Edit—>Refactor—>convert ··ARC—>選擇類
copy常用于修飾字符串(NSString)通常其他對(duì)象使用retain進(jìn)行修飾符
strong與retain用法相同在MRC下通常使用retain修飾屬性,而在ARC下通常使用strong修飾屬性
類方法創(chuàng)建對(duì)象:NSString * str = [[NSString alloc]init];對(duì)象是被系統(tǒng)自動(dòng)歸到自動(dòng)釋池下管理(典型的標(biāo)志就是沒有alloc)
實(shí)例創(chuàng)建的對(duì)象:NSString * str = [NSString StringWithString:@"Carden"];如果在手動(dòng)內(nèi)存管理模式下,需要用release方法進(jìn)行釋放
在@implementation下聲明的變量是這個(gè)類的私有變量,外部是無法訪問的
在@interface下聲明的變量可以設(shè)定為全局或者私有變量
在@property聲明的就是全局變量,外部既可以訪問,內(nèi)部也可以調(diào)用
多態(tài):子類重寫父類方法,然后用父類引用指向子類對(duì)象,調(diào)用方法時(shí)候會(huì)進(jìn)行動(dòng)態(tài)綁定,這就是多態(tài)。多態(tài)對(duì)程序的擴(kuò)展具有非常大的作用,如果有配置文件甚至可以不動(dòng)源碼。
Father* father1 = [Sonalloc];//父類的指針可以指向子類的對(duì)象
[father1run];//執(zhí)行方法,不看指針,而是看對(duì)象是通過哪個(gè)類來開辟空間創(chuàng)建
協(xié)議與Block的比較?
協(xié)議本質(zhì):
1類方法里創(chuàng)建協(xié)議和實(shí)現(xiàn)2類方法的協(xié)議屬性;2類添加協(xié)議所在的頭文件和<協(xié)議名稱>;
創(chuàng)建1類對(duì)象,創(chuàng)建2類對(duì)象,把2類對(duì)象賦值給1類屬性,1類對(duì)象執(zhí)行方法
Block本質(zhì):
1類方法里創(chuàng)建塊方法和實(shí)現(xiàn)2類方法的2類對(duì)象;2類方法的參數(shù)為塊類型,滿足條件后執(zhí)行塊方法;
創(chuàng)建1類對(duì)象,1類對(duì)象執(zhí)行方法
傳值本質(zhì):
方法1包含方法2,方法1的的參數(shù)變量直接寫成方法2的輸入?yún)?shù),只要方法調(diào)用方法就可以做到。
傳值始終:
協(xié)議的初始值出現(xiàn)在主動(dòng)類的方法里,Block的初始值出現(xiàn)在包含Block類型的方法里。
- (void)button:(BOOL)state AndBlock:(void(^)(BOOL))block;
協(xié)議作用:
協(xié)議可以讓類1和類2甚至類3等完全不同的類各自創(chuàng)建的對(duì)象使用同一個(gè)方法,而且可以有參數(shù),因?yàn)閕d類型不論什么類創(chuàng)建的對(duì)象都可以接受,也就是說,字符串創(chuàng)建的對(duì)象和數(shù)組和字典創(chuàng)建的對(duì)象都可以接收
//Document:存放長期要用的文件
//library:存放系統(tǒng)文件
//tmp:存儲(chǔ)臨時(shí)文件,APP重啟時(shí),該目錄下的文件清空
NSLog(@"文件大小:%@",dict[@"NSFileSize"]);
NSFileManager * manager = [NSFileManager defaultManager];
(對(duì)象)[文件管理器創(chuàng)建的單例contentsOfDirectoryAtPath(數(shù)組)/subpathsOfDirectoryAtPath(數(shù)組)/attributesOfItemAtPath(字典)]
(布爾值)[文件管理器創(chuàng)建的單例fileExistsAtPath/createFileAtPath/copyItemAtPath/moveItemAtPath/removeItemAtPath]
文件句柄:指定已知路徑下文件的操作權(quán)限(只讀/只寫/讀寫)
NSFileHandle * fileHandele = [NSFileHandle fileHandleForReadingAtPath/fileHandleForWritingAtPath/fileHandleForUpdatingAtPath]
[文件句柄創(chuàng)建的對(duì)象readDataOfLength(數(shù)據(jù))/seekToFileOffset(void)/seekToEndOfFile(void)/writeData:data(void)/synchronizeFile(void)]
NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];//數(shù)據(jù)轉(zhuǎn)字符串
NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];//字符串轉(zhuǎn)數(shù)據(jù)
[已存放內(nèi)容的官方類型指針writeToFile:文件路徑及文件名] .Plist文件的生成
[NSDictionary dictionaryWithContentsOfFile(內(nèi)容官方類型)] .Plist文件的讀取
[NSKeyedArchiver archiveRootObject(布爾值)/unarchiveObjectWithFile(內(nèi)容類型)] .data文件的生成和讀取
基類NSObject后添加歸檔協(xié)議
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder (encodeInt/encodeObject):self.屬性(void)];
}//歸檔-自定義的.m文件添加
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
if(self= [superinit])
{
self.age = [aDecoder decodeIntForKey:@"AGE"];
}
returnself;
}//解檔-自定義的.m文件添加
NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];//存儲(chǔ)用戶個(gè)人登錄信息的單例對(duì)象初始化
[用戶單例創(chuàng)建的對(duì)象setObject(void)/objectForKey(字符串)/removeObjectForKey(void)]//增加、提取、刪除
/*
#import "GDataXMLNode.h"
#define PATH @"/Users/qianfeng/Desktop/1518OC第10天/xml/xml.txt"
NSString * xml = [NSString stringWithContentsOfFile:PATH encoding:NSUTF8StringEncoding error:nil];
GDataXMLDocument * document = [[GDataXMLDocument alloc]initWithXMLString:xml options:0 error:nil];
NSArray* array = [documentnodesForXPath:@"http://ComeChannel/BuyCarBudget"error:nil];
for(GDataXMLElement* eleinarray)
{
NSLog(@"%@",[[ele addAttribute:for@"name"]stringValue]);
}
GDataXMLElement * rootEle = [document rootElement];
GDataXMLElement * booksEle = (GDataXMLElement*)[rootEle childAtIndex:0];
NSArray * booksArray = [booksEle children];
for (GDataXMLElement * bookEle in booksArray)
{
GDataXMLElement * summaryEle = [[bookEle elementsForName:@"summary"]firstObject];
NSLog(@"%@",summaryEle.name);
NSLog(@"%@",summaryEle.stringValue);
NSLog(@"%@",summaryEle.XMLString);
}
NSDictionary* dict =@[@"book":@"http://www.baidu.com",@"xmlns":@"http://www.sina.com.cn"];
NSArray* array = [document nodesForXPath: namespaces:dict error:nil];
*/
1.判斷字符串中提取的字符類型?(中文,字母)
2.可變數(shù)組添加的ID為什么不能是NSInteger?
-(NSString*)description{
return[NSString stringWithFormat:@"count = %d index = %ld",count,(long)indx];
}
最后編輯于 :
?著作權(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ù)。