经历过的才是最真实的
最近一段时间简单的笔记
1、 录屏权限选择不允许时,处理
viewServiceDidTerminateWithError:: Error Domain=_UIViewServiceInterfaceErrorDomain Code=3 "(null)" UserInfo={Message=Service Connection Interrupted}
备注:意外问题mac的dns设置问题,导致各种闪退,以及提交代码提示:could not resolve host
1、在视图旋转时,会产生锯齿
解决:XCode的info.plist里面有以下两项可以开启抗锯齿:
Renders with edge antialisasing = YES (UIViewEdgeAntialiasing)
Renders with group opacity = YES (UIViewGroupOpacity)
但是我发现,当我在视图里放图片,然后视图加阴影后,移动产生了锯齿。
视图内抗锯齿处理:
在UIView的drawRect方法里为当前视图打开抗锯齿:
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetAllowsAntialiasing(context, true);
CGContextSetShouldAntialias(context, true);
}
发现问题:
1、在UIImageView 除外的视图中同时添加缩放手势、拖动手势时,会出现:在放大视图后,对视图进行拖动,会很缓慢
小记
1、NSFileManager进行操作时,只能对当前app中的资源进行操作,录屏产生的视频存在设备磁盘中,不属于当前app,所以不可以操作
// 获取录制完成的视频路径(遍历所有属性)
unsigned int count;
objc_property_t *properties = class_copyPropertyList([RPPreviewViewController class], &count);
for (int i = 0; i<count; i++) {
objc_property_t property = properties[i];
const char *cName = property_getName(property);
NSString *name = [NSString stringWithCString:cName encoding:NSUTF8StringEncoding];
if ([name isEqualToString:@"movieURL"]){
NSURL *movieURL = [_previewViewController valueForKey:@"movieURL"];
DEBUG_NSLog(@"movieURL:%@,path-%@",movieURL,movieURL.path);
NSString *newFilePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"record_1.mp4"];
long long filesize = [[[NSFileManager defaultManager] attributesOfItemAtPath:movieURL.path error:nil] fileSize];
NSString *fileSizeStr = [NSByteCountFormatter stringFromByteCount:filesize countStyle:NSByteCountFormatterCountStyleFile];
DEBUG_NSLog(@"录制视频文件大小-%@",fileSizeStr);
}
free(properties);
2、NSURL转路径字符串,[url path];
2017-5-12
1、计算机网络基础知识点
Mbps=mega bits per second(兆位/秒)是速率单位,
MB=mega bytes(兆比、兆字节)是量单位,1MB/S(兆字节/秒)=8MBPS(兆位/秒)。
我们所说的硬盘容量是40GB、80GB、100GB,这里的B指是的Byte也就是“字节”。
所谓 10M 带宽,其实是指 10Mbps (兆比特)
计算带宽理论最快下载速度:10÷8=1.25MB/s
a、家庭带宽大多数不是真正的独显,受上网时段影响,可能会出现高峰期时候与预期理论值相差非常大,空闲时间可能会超过理论值。
b、IDC带宽属于商用带宽价格相比就比家庭带宽贵的多,当然质量上也很稳定与充足,不会有太大的上下浮动,带宽上下行对等,IDC机房庞大的数据中心拥有足够的带宽资源
知识点:
由此方法来判断当前线程是否为主线程
/* returns non-zero if the current thread is the main thread */
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_2_0)
int pthread_main_np(void);
JSON
@“ \
{
\”name\”:\”Harry Potter\”,
\”pages\”:512.
\”publishDate\”:\”2010-02\” \
}
”
1、NSString* filePath 和NSString *filePath 有没有区别
A、栈区(stack):由系统自动分配,一般存放函数参数值、局部变量的值
block有三种类型:
a、__NSConcreteStackBlock(栈中)
b、__NSConcreteGlobalBlock (程序的数据区域中):
一般出现的情况:i.设置全局变量的地方;ii.Block愈发的表达式中不使用任何外部变量时
c、__NSConcreteMallocBlock (堆中)
对不同区域的block进行copy时,copy效果分别是:从栈复制到堆并被block持有、什么也不做、引用计数增加(被block持有)
__main_block_desc_0多了两个成员函数:
__main_block_copy_0 __main_block_dispose_0
2017-06-07
1、利用clang将oc代码转换成c
cd到文件所在文件夹路径,执行命令 clang -rewrite-objc yourfile.m
2、将oc文件转换成可执行文件
- -fobjc-arc表示编译器需要支持ARC特性
- -framework Foundation表示引用Foundation框架
- HelloWord.m为需要进行编译的源代码文件
- -o HelloWord表示输出的可执行文件的文件名
cocos2d博客
http://www.cnblogs.com/zilongshanren/default.html?page=8
播放视频时录音会断
[DFCNotificationCenter addObserver:self selector:@selector(audioSessionWasInterrupted:) name:AVAudioSessionInterruptionNotification object:nil];
- (void)audioSessionWasInterrupted:(NSNotification *)notification
{
// NSLog(@"the notification is %@",notification);
DEBUG_NSLog(@"---%d",self.aqc.run);
if (AVAudioSessionInterruptionTypeBegan == [notification.userInfo[AVAudioSessionInterruptionTypeKey] intValue])
{
NSLog(@"begin");
}
else if (AVAudioSessionInterruptionTypeEnded == [notification.userInfo[AVAudioSessionInterruptionTypeKey] intValue])
{
NSLog(@"begin - end--%@",self);
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[self start];
}
}
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord mode:AVAudioSessionModeVoiceChat options:AVAudioSessionCategoryOptionMixWithOthers error:nil];
备注:上面一句代码会造成无法使用airplay
AVAudioSessionCategoryOptionMixWithOthers/* MixWithOthers is only valid with AVAudioSessionCategoryPlayAndRecord, AVAudioSessionCategoryPlayback, and AVAudioSessionCategoryMultiRoute */
渲染(rendering):计算机根据模型闯将图像的过程
模型(model):根据几何图元创建,也称作物体(object)
几何图元包括点、直线和多边形等,是通过顶点(vertex)指定
window.windowLevel = UIWindowLevelAlert;
使用此代码之后,状态栏有可能会消失
2017-06-30
1、地理位置解码(GPS、wifi路由器、蜂窝煤数据)
通普路, 中国浙江省杭州市******通普路(wifi路由器)(大概定位到的是wifi分管路由器的位置,不太精确)
***中心Ⅰ座, 中国浙江省杭州市********5号附近(蜂窝数据)(相对于wifi定位 更精确)
2、异常处理(只能捕获部分异常)
void UncaughtExceptionHandler(NSException *exception){
NSArray *callStack = [exception callStackSymbols];
NSString *reason = exception.reason;
NSString *name = exception.name;
NSString *content = [NSString stringWithFormat:@"========异常错误报告========\nname:%@\nreason:\n%@\ncallStackSymbols:\n%@",name,reason,[callStack componentsJoinedByString:@"\n"]];
/**
* 把异常崩溃信息发送至开发者邮件
*/
NSMutableString *mailUrl = [NSMutableString string];
[mailUrl appendString:@"mailto:[email protected]"];
[mailUrl appendString:@"?subject=程序异常崩溃,请配合发送异常报告,谢谢合作!"];
[mailUrl appendFormat:@"&body=%@", content];
// 打开地址
NSString *mailPath = [mailUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:mailPath]];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
return YES;
}
2017-07-03
1、结构体与类的区别
(运行时产生的变量由堆分配内存,编译时产生的变量由栈分配内存)
a】结构体是实值类型(value types),使用栈存储(stack alloction),所有结构成员默认都是public,不能被声明为protected
类是引用类型(reference types),使用堆存储(heap alloction)
b】结构体成员不能指定初始值、使用new关键字对数组进行初始化,不能声明默认的构造函数,也不能声明析构函数
类变量可以指定赋值,可以声明析构函数
备注:析构函数与构造函数相反,当对象结束生命周期时,系统自动执行析构函数
在C语言中,通过结构体名称就可以完成结构体变量的定义,并分配内存空间;
而类仅仅用来定义变量,不会分配内存空间,必须使用new等关键字来完成内存空间的分配
2、在项目原有tableview上后续添加cell,点击没有反应(不走didSelectRowAtIndexPath方法),原有cell的正常
原因:显示tableview的父级视图大小固定为原有数据的宽高,重新调整即可
1、本地找不到远程分支
可以把远程某各分支拉去到本地的下,如果没有,则会在本地新建
获取远程分支到本地新分支,并跳到分支,这里加了,让创建的本地分支跟中远程的分支。
2
在当前分支的基础上创建新的分支
一、replay kit填坑笔记
Section A 问题记录
1、调用RPScreenRecorder时,会出现访问权限弹框以及预览视频界面的按钮,显示为英文
探究:在录屏模块开发过程中发现,在iOS10.1以下的系统中,有国际化(大陆显示中文),在iOS10.2以及更高版本中则没有国际化处理,应该是目前新的系统中没有对录屏这块进行国际化处理
2、在使用RPScreenRecorder调用stopRecordingWithHandler方法时,会偶尔报错:RPRecordingErrorDomain - code(5804),错误信息显示,failed during recording
解决:在开发文档上,没有查询到此状态码,并且在stackoverflow中有开发者遇到此问题,至今没有解决
偶然的一个方法,就是重启了ipad,即可正常使用
3、预览界面消失时,先调用-previewController:didFinishWithActivityTypes:方法,再调用-previewControllerDidFinish:方法
1、点击save --- com.apple.UIKit.activity.SaveToCameraRoll
2、点击cancel --- activityTypes为空
Section B 框架缺陷:
a、RPScreenRecorder初始化方法+ (RPScreenRecorder *)sharedRecorder中声明Singleton class used to control app recording,但是在同一模块多次调用[RPScreenRecorder sharedRecorder],然后多处打印该对象的recording属性时,会发现很乱,比如当前已经开始录屏,此时按照推理recording为yes,在想要结束录屏时打印该属性,则有可能为no,所以在使用时,最好将RPScreenRecorder变量还是声明为属性,在这种做法下,基本可以避免recording无规律的现象。因此对此处单例模式产生怀疑,或者说是自己对单例模式的理解有问题?
b、在弹出视频预览框时,偶尔会出现白屏,这个具体原因有可能跟设备有关,或者说其他原因。(我在开发过程中遇到过几次,而测试人员在测试过程中则没有出现这种情况)
viewServiceDidTerminateWithError:: Error Domain=_UIViewServiceInterfaceErrorDomain Code=3 "(null)" UserInfo={Message=Service Connection Interrupted}
c、replaykit中的直播功能与录屏功能不可同时使用(两者都会影响recording属性值);录屏功能和投屏功能不可同时使用