Object-C 零碎知识点笔记
来源:互联网 发布:调音台软件 编辑:程序博客网 时间:2024/05/07 22:54
1、记录代码片段运行时间
double begin = mach_absolute_time();[self refreshSongImageInNewLogic];double end = mach_absolute_time();NSLog(@"time cost = %f",MachTimeToMilliSecond(end - begin)); //毫秒double MachTimeToMilliSecond(uint64_t time){ mach_timebase_info_data_t timebase; mach_timebase_info(&timebase); return (double)time * (double)timebase.numer / (double)timebase.denom / 1e6;}
以上是一种方法,今天看 YYCache 源码的时候发现另外一种记录代码片段运行时间的方法,也顺带记录一下吧:
NSTimeInterval begin, end, time; printf("\n===========================\n"); printf("Memory cache set 200000 key-value pairs\n"); begin = CACurrentMediaTime(); @autoreleasepool { for (int i = 0; i < count; i++) { [nsDict setObject:values[i] forKey:keys[i]]; } } end = CACurrentMediaTime(); time = end - begin; printf("NSDictionary: %8.2f\n", time * 1000);
好奇点击 CACurrentMediaTime 进去看了一下,结果,哈哈.......它的其实也是调用 mach_absolute_time() 来计时的,同根同源啊!
2、关于视频播放,网上查找了一下资料主要有 MPMoviePlayerController (注意和 MPMoviePlayerViewController 的区别 )和 AVPlayer 这两个类来播放,如果对 UI 的自定义需求不大的话建议用 MPMoviePlayerController ; AVPlayer 是对 MPMoivePlayerController 的进一步封装,可提供更加个性化的定制,当然,使用起来就相对就没有 MPMoviePlayerController 那么方便了。具体的可以参考苹果的开发文档,两者的比较可以看这里:AVPlayer and MPMoivePlayerController difference
另外,在 github 上找到 2 个 star 比较多的开源库,也可参考一下:
ALMoviePlayerController - 使用的是 MPMoviePlayerController
VKVideoPlayer - 使用的是 AVPlayer
VideoPlayerKit - 封装了挺多功能的
3、手机一不小心升级 ios 9.1,然后 XCode还是7.0 ,导致真机 debug 不了了。想着算了那就升级一下 XCode 到 7.1 呗,结果 XCode 7.1 最低要求系统是 10.10.5, 尼玛,我又要升级系统。最后我一整天啥都没干成,就在那里升级升级......
好不容易升级完了,结果XCode 7.2 beta ,ios 9.1 真机调试的时候报出 “could not find developer disk image” 的错误,泪崩~ 好吧,Google一下喽,最后的解决办法是:
把 XCode 7.1 /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/9.1 这个目录下(包括9.1这个文件夹)的所有内容 copy 到 XCode 7.2 beta 版本的
/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/ 这个目录下,然后重启一下 XCode 就好了。
4、设置 UIButton 的 hidden 属性不起作用,很多情况下都是因为你在后台线程操作的原因。改为在主线程设置就好了。
dispatch_async(dispatch_get_main_queue(), ^{ weakSelf.toMVButton.hidden = YES; weakSelf.toKTVButton.hidden = YES; });
今天发现在 Block 中修改 button 的位置(frame)的时候看到 log 打印出来的位置明明对了,界面却显示不正确,setNeedsLayout 也没有用,后来改为在主线程设置就好了。
5、用宏定义检测block是否可用!
#define BLOCK_EXEC(block, ...) if (block) { block(__VA_ARGS__); }; // 宏定义之前的用法 /* if (completionBlock) { completionBlock(arg1, arg2); } */ // 宏定义之后的用法 BLOCK_EXEC(completionBlock, arg1, arg2);
6、对于逆向工程的目的,但是这是可以看的对象实例变量。它通常很容易用valueForKey这样获取。
还有一个情况下,它不能用valueForKey获取,虽然:当这个变量是void *类型。
@interface MPMoviePlayerController : NSObject {
void *_internal;
// 4 = 0x4
BOOL _readyForDisplay;
// 8 = 0x8
}
用底层方式来访问
id internal = *((const id*)(void*)((uintptr_t)moviePlayerController + sizeof(Class)));
不要使用这段代码,它的非常危险的。仅使用于逆向工程
7、获取沙盒路径的2种方式,第一种是比较常用的
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
第二种是
char* home = getenv("HOME");strcat(home, "/Documents/recorder.pcm");
对于第二种,如果你需要在 C++ 文件里面读写文件又需要到沙盒路径的时候再适合不过了。
8、UILabel 设置透明字体
9、
- Object-C 零碎知识点笔记
- 笔记 C语言零碎知识点记录
- C/C++零碎知识点
- C语言零碎知识点
- C/C++零碎知识点
- android笔记 零碎知识点
- C#零碎知识点笔记
- C#零碎知识点笔记
- C#零碎知识点笔记
- c 语言零碎知识点总结
- C语言中的零碎知识点
- JS零碎知识点学习笔记
- python3学习笔记:零碎知识点
- 工作笔记(零碎知识点)
- c 的零碎笔记
- C/C++零碎笔记
- C语言零碎知识点总结(结构体)
- C语言/ACM 零碎知识点及注意事项
- CocoaPods使用详细说明
- UVA - 439 Knight Moves
- iOS开发UI篇—Quartz2D使用(绘图路径)
- Android XListView 如何实现 自动下拉刷新
- SecureCRT 安装与激活
- Object-C 零碎知识点笔记
- 解决:ads1.2 无法重新安装的问题
- WPF ComboBox样式
- UI动画总结
- 几种常见的JavaScript特效
- Linux图像处理高手―GIMP与ImageMagicK
- Android学习日志之一:Intent知识点及其应用
- 欢迎使用CSDN-markdown编辑器
- 【自动化测试工具】QTP/UFT入门