Paste_Image.png
网上有很多方法,尝试起来都很麻烦,我这个方法还是比较简单的。 解决方法: 我们在手机用数据线连接到电脑时,会弹出很多手机里面的图片,你的隐私尽收眼底(好尴尬)。在1部分导入A视频文件,点击 2 (照片)的时候会在 3 的位置上出现,此时,我们直接把视频按住,拖到桌面即可,是不是很简单啊!
xcode操作.gif
有时候我们会需要把工程中的某一个字符串A全部替换成 B,很多,上千个,也许你体力好,你 先查搜索出 存在 字符串A的类,几千个,然后一个一个点进去修改,,,,我只能说你体力好啊!
解决方法 如图所示,我们忽略了在Find 下面还有一个 Replace,但是需要指出的是 必须要先使用 Find 搜索出所有内容,再点击 Replace 才行,否则 Replace All按钮是灰色的,无法点击的。
移除对旧设备的支持
路径:~/Library/Developer/Xcode/iOS DeviceSupport
移除旧版本的模拟器支持
路径:~/Library/Application Support/iPhone Simulator
移除模拟器的临时文件
路径:~/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执行文件所在的路径是不一样的):
~/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
我们在Xcode的账户中登录完一个帐户后,Archives一个工程后就会出现Archives列表,这个列表中会同步你所登录的全部账号的APP,如果你有多个账号在登录,那么多个账号中的APP都会在Archives列表中展示出来,不过值得一提的时,使用A账户打包的APP,不会同步到其他账户中,就算A和B同时登录,使用A打包的App在单独登录B账户时也不会有同步记录。
Paste_Image.png
**验证: 我们 删除本地的Archives缓存,我们进入到 资源库 -> Developer -> Xcode ->Products &Archives 删除这个路径下的Products 和Archives文件夹。退出A账户,再次登录B账户,打包任意一个项目,会出现Archives列表,这个时候会同步过来所有B账户的APP,在这个Archives列表中不会出现使用A账户打包的APP。 **
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 该编译项用于设置是否只编译当前使用的设备对应的arm指令集。
当该选项设置成YES时,你连上一个armv7指令集的设备,就算你的Valid Architectures和Architectures都设置成armv7/armv7s/arm64,还是依然只会生成一个armv7指令集的二进制包。 通常情况下,该编译选项在Debug模式都设成YES,Release模式都设成NO。
其实公钥和私钥都可以用来加密或解密---只要能保证用A加密,就用B解密就行。至于A是公钥还是私钥,其实可以根据不同的用途而定。 既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出: 公钥负责加密,私钥负责解密; 同理,既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出: 私钥负责签名,公钥负责验证。
以下的设置可以解决 iOS8控制台打印很多乱码的问题,但是同时也使真机调试时控制台没有打印输出。取消勾选即可(也就是没有执行这个设置),切换到模拟器的时候还是需要勾选上,否则还是会有乱码。
Paste_Image.png
协议可以继承其他协议,并且可以继承多个协议,在iOS中对象是不支持多继承的,而协议可以多继承。
// 当前协议继承了三个协议,这样其他三个协议中的方法列表都会被继承过来
@protocol LoginProtocol <UITableViewDataSource, UITableViewDelegate, UITextFieldDelegate>
@end
无论是@optional还是@required,在委托方调用代理方法时都需要做一个判断,判断代理是否实现当前方法,否则会导致崩溃。
示例:
// 判断代理对象是否实现这个方法,没有实现会导致崩溃
if ([self.delegate respondsToSelector:@selector(userLoginWithUsername:password:)]) {
[self.delegate userLoginWithUsername:self.username.text password:self.password.text];
}
线程无关方法
- (id)performSelector:(SEL)aSelector;
- (id)performSelector:(SEL)aSelector withObject:(id)object;
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;
这三个方法,均为同步执行,与线程无关,主线程和子线程中均可调用。等同于直接调用该方法。在需要动态的去调用方法的时候去使用。
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;
在方法未到执行时间之前,取消方法为
+ (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;
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] 代表一个对象,这个对象的值是空