1. 如何把 iphone中的視頻導(dǎo)出到 iMac 桌面
網(wǎng)上有很多方法,嘗試起來都很麻煩,我這個(gè)方法還是比較簡單的。
解決方法: 我們在手機(jī)用數(shù)據(jù)線連接到電腦時(shí),會(huì)彈出很多手機(jī)里面的圖片清女,你的隱私盡收眼底(好尷尬)。在1部分導(dǎo)入A視頻文件晰筛,點(diǎn)擊 2 (照片)的時(shí)候會(huì)在 3 的位置上出現(xiàn)嫡丙,此時(shí),我們直接把視頻按住读第,拖到桌面即可曙博,是不是很簡單啊怜瞒!
2. 如何替換Xcode整個(gè)工程中的某個(gè)字符串A為 B
有時(shí)候我們會(huì)需要把工程中的某一個(gè)字符串A全部替換成 B父泳,很多,上千個(gè)吴汪,也許你體力好惠窄,你 先查搜索出 存在 字符串A的類,幾千個(gè)漾橙,然后一個(gè)一個(gè)點(diǎn)進(jìn)去修改杆融,,霜运,擒贸,我只能說你體力好啊!
解決方法 如圖所示,我們忽略了在Find 下面還有一個(gè) Replace觉渴,但是需要指出的是 必須要先使用 Find 搜索出所有內(nèi)容,再點(diǎn)擊 Replace 才行徽惋,否則 Replace All按鈕是灰色的案淋,無法點(diǎn)擊的。
3. Xcode磁盤空間大清理
移除對舊設(shè)備的支持
路徑:~/Library/Developer/Xcode/iOS DeviceSupport
移除舊版本的模擬器支持
路徑:~/Library/Application Support/iPhone Simulator
移除模擬器的臨時(shí)文件
路徑:~/Library/Application Support/iPhone Simulator/6.1/tmp (以iOS Simulator 6.1為例)
移除模擬器中安裝的Apps
路徑:~/Library/Application Support/iPhone Simulator/6.1/Applications (以iOS Simulator 6.1為例)
移除Archives
路徑:~/Library/Developer/Xcode/Archives
移除DerivedData
路徑:~/Library/Developer/Xcode/DerivedData
移除舊的Docsets
路徑:~/Library/Developer/Shared/Documentation/DocSets
模擬器里面app的路徑:
~/Library/Developer/CoreSimulator/Devices/{Device_ID}/data/Containers/Bundle/Application/{Application_ID}/
模擬器里面app的沙盒路徑(此路徑和app執(zhí)行文件所在的路徑是不一樣的):
~/Library/Developer/CoreSimulator/Devices
模擬器SDK路徑:
/Applications/Xcode6.1.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/
NSUserDefault 路徑:
~/Library/Developer/CoreSimulator/Devices/{Device_ID}/data/Library/Preferences
Provisioning Profile文件在哪险绘?
~/Library/MobileDevice/Provisioning Profiles
4.關(guān)于Xcode的Archives列表管理問題
我們在Xcode的賬戶中登錄完一個(gè)帳戶后踢京,Archives一個(gè)工程后就會(huì)出現(xiàn)Archives列表,這個(gè)列表中會(huì)同步你所登錄的全部賬號的APP宦棺,如果你有多個(gè)賬號在登錄瓣距,那么多個(gè)賬號中的APP都會(huì)在Archives列表中展示出來,不過值得一提的時(shí)代咸,使用A賬戶打包的APP蹈丸,不會(huì)同步到其他賬戶中,就算A和B同時(shí)登錄,使用A打包的App在單獨(dú)登錄B賬戶時(shí)也不會(huì)有同步記錄逻杖。
**驗(yàn)證: 我們 刪除本地的Archives緩存奋岁,我們進(jìn)入到 資源庫 -> Developer -> Xcode ->Products &Archives 刪除這個(gè)路徑下的Products 和Archives文件夾。退出A賬戶荸百,再次登錄B賬戶闻伶,打包任意一個(gè)項(xiàng)目,會(huì)出現(xiàn)Archives列表够话,這個(gè)時(shí)候會(huì)同步過來所有B賬戶的APP蓝翰,在這個(gè)Archives列表中不會(huì)出現(xiàn)使用A賬戶打包的APP。 **
5. 指令集詳解
armv6
iPhone女嘲、iPhone 3G
iPod 1G畜份、iPod 2G
armv7
iPhone 3GS、iPhone 4
iPod 3G澡为、iPod 4G漂坏、iPod 5G
iPad、iPad 2媒至、iPad 3顶别、iPad Mini
armv7s
iPhone 5、iPhone 5C
iPad 4
arm64
iPhone 5S iPhone 6 iPhone 6Plus
iPad Air, Retina iPad Mini
Build Active Architectures Only
該編譯項(xiàng)用于設(shè)置是否只編譯當(dāng)前使用的設(shè)備對應(yīng)的arm指令集拒啰。
當(dāng)該選項(xiàng)設(shè)置成YES時(shí)驯绎,你連上一個(gè)armv7指令集的設(shè)備,就算你的Valid Architectures和Architectures都設(shè)置成armv7/armv7s/arm64谋旦,還是依然只會(huì)生成一個(gè)armv7指令集的二進(jìn)制包剩失。
通常情況下,該編譯選項(xiàng)在Debug模式都設(shè)成YES册着,Release模式都設(shè)成NO拴孤。
6. RSA相關(guān)使用
其實(shí)公鑰和私鑰都可以用來加密或解密---只要能保證用A加密,就用B解密就行甲捏。至于A是公鑰還是私鑰演熟,其實(shí)可以根據(jù)不同的用途而定。
既然是加密司顿,那肯定是不希望別人知道我的消息芒粹,所以只有我才能解密,所以可得出:
公鑰負(fù)責(zé)加密大溜,私鑰負(fù)責(zé)解密化漆;
同理,既然是簽名钦奋,那肯定是不希望有人冒充我發(fā)消息座云,只有我才能發(fā)布這個(gè)簽名疙赠,所以可得出:
私鑰負(fù)責(zé)簽名,公鑰負(fù)責(zé)驗(yàn)證疙教。
7. 真機(jī)調(diào)試控制臺不打印輸出NSLog內(nèi)容
以下的設(shè)置可以解決 iOS8控制臺打印很多亂碼的問題棺聊,但是同時(shí)也使真機(jī)調(diào)試時(shí)控制臺沒有打印輸出。取消勾選即可(也就是沒有執(zhí)行這個(gè)設(shè)置),切換到模擬器的時(shí)候還是需要勾選上贞谓,否則還是會(huì)有亂碼限佩。
8.關(guān)于代理協(xié)議的一些細(xì)節(jié)
協(xié)議可以繼承其他協(xié)議,并且可以繼承多個(gè)協(xié)議裸弦,在iOS中對象是不支持多繼承的祟同,而協(xié)議可以多繼承。
// 當(dāng)前協(xié)議繼承了三個(gè)協(xié)議理疙,這樣其他三個(gè)協(xié)議中的方法列表都會(huì)被繼承過來
@protocol LoginProtocol <UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate>
@end
無論是@optional還是@required晕城,在委托方調(diào)用代理方法時(shí)都需要做一個(gè)判斷,判斷代理是否實(shí)現(xiàn)當(dāng)前方法窖贤,否則會(huì)導(dǎo)致崩潰砖顷。
示例:
// 判斷代理對象是否實(shí)現(xiàn)這個(gè)方法,沒有實(shí)現(xiàn)會(huì)導(dǎo)致崩潰
if ([self.delegate respondsToSelector:@selector(userLoginWithUsername:password:)]) {
[self.delegate userLoginWithUsername:self.username.text password:self.password.text];
}
9.performSelector的總結(jié)
線程無關(guān)方法
- (id)performSelector:(SEL)aSelector;
- (id)performSelector:(SEL)aSelector withObject:(id)object;
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;
這三個(gè)方法赃梧,均為同步執(zhí)行滤蝠,與線程無關(guān),主線程和子線程中均可調(diào)用授嘀。等同于直接調(diào)用該方法物咳。在需要?jiǎng)討B(tài)的去調(diào)用方法的時(shí)候去使用。
Delayed perform
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes;
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay;
- 這兩個(gè)方法只能在主線程中執(zhí)行蹄皱,其它線程不執(zhí)行
- 即使delay傳參為0览闰,也不會(huì)立即執(zhí)行,而是在next runloop執(zhí)行
在方法未到執(zhí)行時(shí)間之前巷折,取消方法為
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(id)anArgument;
+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;
on mainthread
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait modes:(NSArray *)array;
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait;
- 這兩個(gè)方法压鉴,在主線程和子線程中均可執(zhí)行,均會(huì)在主線程中調(diào)aSelector方法
- 如果設(shè)置wait為NO:等待當(dāng)前線程執(zhí)行完以后锻拘,主線程才會(huì)執(zhí)行aSelector方法油吭;
- 設(shè)置為YES:不等待當(dāng)前線程執(zhí)行完,就在主線程上執(zhí)行aSelector方法逊拍。
- 第二個(gè)方法使用默認(rèn)的模式(NSDefaultRunLoopMode)。
主線程就馬上執(zhí)行 ~~际邻。
10.在模擬器上的UITextFeld中輸入 _ “確定“后就會(huì)崩潰芯丧。真機(jī)上不會(huì)崩潰。
NULL (void *)0 literal null value for C pointers
nil (id)0 literal null value for Objective-C objects
Nil (Class)0 literal null value for Objective-C classes
NSNull [NSNull null] 代表一個(gè)對象世曾,這個(gè)對象的值是空
- nil缨恒、Nil谴咸、NULL在使用上是沒有什么區(qū)別的,但是程序員的一個(gè)約定:C結(jié)構(gòu)的指針使用NULL骗露;對象指針使用nil岭佳;類對象指針使用Nil。
另外NSNull和nil萧锉、Nil珊随、NULL具有本質(zhì)上的區(qū)別。NSNull是一個(gè)對象柿隙,而nil叶洞、Nil、NULL只是給指針賦空值禀崖。
-
在另外衩辟,給一個(gè)賦值為nil的對象發(fā)送消息,不會(huì)產(chǎn)生異常波附。當(dāng)然給一個(gè)賦值為Nil艺晴、NULL的對象發(fā)送消息也不會(huì)產(chǎn)生異常,這個(gè)在例子中已經(jīng)證實(shí)掸屡。故根據(jù)此條結(jié)論的總結(jié)為:nil封寞、Nil、NULL目的都是給一個(gè)指針賦值為空折晦,給空指針發(fā)送消息不會(huì)產(chǎn)生異常钥星。
比如 [[[MethodTool shareTool] getUserDefaults:@"locaUserId"] length]>0 如果本地沒有儲存這個(gè)值就返回 nil,對nil 發(fā) length 消息是不會(huì)產(chǎn)生異常的满着,并且返回的是0