OC入門

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ù)。

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

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