1.人怎样虐待动物,就会怎样虐待人。并不见得哪个民族是多么恶,而是集体作恶和作恶的“机遇”条件塑造的。并不见得某泱泱大国就。。。只是在某个时间某个条件下释放了人性的恶。
2.万事万物的源头究竟是什么呢?意识是什么呢?
我相信人是精心设计出来的,地球上动植物的基因都是设计好的。
1.人怎样虐待动物,就会怎样虐待人。并不见得哪个民族是多么恶,而是集体作恶和作恶的“机遇”条件塑造的。并不见得某泱泱大国就。。。只是在某个时间某个条件下释放了人性的恶。
2.万事万物的源头究竟是什么呢?意识是什么呢?
我相信人是精心设计出来的,地球上动植物的基因都是设计好的。
使用原始npm
1.查看需要更新的版本
npm outdated
该命令会列出所有需要更新的项目
2.修改package.json中需要更新的包对应的版本号
npm update
由于npm update只能按照package.json中指定的版本号进行更新,太繁琐复杂,接下来使用插件更新
使用 npm-check-updates
1.安装
npm install -g npm-check-updates
2.查看需要更新的版本
npm-check-updates
可以简写为ncu,该命令会列出需要更新的包。
3.更新
1 | ncu -a |
更新包的同时更新package.json文件
// [socket on:@”chat” callback:^(NSArray *dataArray, SocketAckEmitter *ackEmitter) {
// //NSLog(@”chat dataArray:%@”,dataArray);
// if (dataArray.count > 0) {
// NSString *messageStr = dataArray.firstObject;
// NSString *desDeStr = [messageStr desDecryptWithKey:deskey];
// if ([NSString isBlankWithStr:desDeStr]) {
// NSLog(@”数据解密失败”);
// return ;
// }
// NSLog(@”desDeStr:%@”,desDeStr);
// NSDictionary *messageDict = [self dictionaryWithJsonString:desDeStr];
//
// NSLog(@”messageDict:%@”,messageDict);
// NSString *msgId = messageDict[@”msgId”];
// // NSLog(@”ackEmitter.expected:%d”,ackEmitter.expected);
// #pragma mark –19年11-19修改
// // NSDictionary *dic = @{@”fromId”:[NSString acquireUserId],@”msgId”:msgId,@”msgBody”:dataArray.firstObject};
// NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:[NSString acquireUserId],@”fromId”,msgId,@”msgId”,messageDict,@”msgBody”,nil];
// // [ackEmitter with:@[msgId]];
// [ackEmitter with:@[[JSON stringWithObject:dic]]];
// [weakSelf receiveSocketMessageWith:@[messageDict]];
//
//// NSDictionary *messageDict = dataArray.firstObject;
//// NSString *msgId = messageDict[@”msgId”];
////// NSLog(@”ackEmitter.expected:%d”,ackEmitter.expected);
////#pragma mark –19年11-19修改
////// NSDictionary *dic = @{@”fromId”:[NSString acquireUserId],@”msgId”:msgId,@”msgBody”:dataArray.firstObject};
//// NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:[NSString acquireUserId],@”fromId”,msgId,@”msgId”,dataArray.firstObject,@”msgBody”,nil];
////// [ackEmitter with:@[msgId]];
//// [ackEmitter with:@[[JSON stringWithObject:dic]]];
//// [weakSelf receiveSocketMessageWith:dataArray];
// }
// }];
iOS 制作自己的Framework(引入第三方库)
一、创建工程并新建Framework Target
新建一个工程,Target选择Cocoa Touch Framework。
添加接口
在刚刚创建的Framework里面添加一些接口。
设置
对Target进行一些设置。
3.1 选择Framework Target,在Build Settings里面搜索Mach -O type,改为Static Library;
3.2 选择Framework Target,在Build Settings里面搜索Link With Standard Libraries,改为No;
3.3 选择Framework Target,在Build Phases的Headers里面将需要暴露出来的头文件设置好。public是可以被引用的,用户可以看到的,例如用户在使用的时候import “xxxxxx.h”,project和private是不暴露出来的。
Framework设置完成,进行下一步。
二、创建测试工程
Framework制作好了,我们需要一个Target测试一下吧。那么直接在刚刚创建的这个工程里面,新建一个Single View APP的Target就好了。
三、引入第三方库
如果我们在制作Framework的时候,需要用到第三方库怎么办呢?网上有轮子,而且有专人维护,总比我们自己造的强。但是如果公司有条件的话,最好是不引入第三方库。
我们在引入第三方库的时候,使用cocoapods进行管理,假设我们的SDK需要AFNetworking这个库,按下面操作引入。
com.sam.IMPro.SAMIM-Broadcast
com.sam.IMPro.SAMIM-BroadcastSetupUI
收到的消息
1 | data:( |
开发中经常会有延迟执行的要求,这里简单介绍几种常用的方法:
1 | [self performSelector:@selector(delayMethod) withObject:nil/*可传任意类型参数*/ afterDelay:2.0]; |
注:此方法是一种非阻塞的执行方式,未找到取消执行的方法。
1 | NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(delayMethod) userInfo:nil repeats:NO]; |
注:此方法是一种非阻塞的执行方式,取消执行方法:- (void)invalidate;即可。
1 | [NSThread sleepForTimeInterval:2.0]; |
注:此方法是一种阻塞执行方式,建议放在子线程中执行,否则会卡住界面。但有时还是需要阻塞执行,如进入欢迎界面需要沉睡3秒才进入主界面时。
没有找到取消执行方式。
1 | __block ViewController/*主控制器*/ *weakSelf = self; |
注:此方法可以在参数中选择执行的线程,是一种非阻塞执行方式。没有找到取消执行方式。
主要使用
安装
首先可以先查看是否安装screen,通过命令
screen -ls
若出现
The program ‘screen’ is currently not installed. You can install it by typing:
sudo apt install screen
说明尚未安装,安装提示,通过命令:
sudo apt install screen 安装screen
新建窗口
1)可直接通过命令screen新建一个窗口,并进入窗口。但通过这种方式新建的窗口没有名字,只有系统分配给它的一个id。当需要恢复窗口时,只能通过id号来恢复。
2)通过命令screen -S name,这样就可以新建一个名字为name的窗口,同样系统也会分配给它一个id,当恢复该窗口时既可以通过id号也可以通过窗口名。
分离会话
退出当前新建的窗口,通过快键键Ctrl+a+d实现分离,此时窗口会跳出[detached]的提示,并回到主窗口。
恢复会话窗口
首先查看当前有哪些screen窗口,通过命令:
screen -ls 将列出窗口列表
由以上可知,当前有两个窗口,其中test窗口已经被杀死,test2窗口分离。可以通过以下命令恢复test2窗口:
screen -r test2 或 screen -r 27582
这样就返回了test2窗口
杀死会话窗口
通过命令kill -9 threadnum
注意此处只能通过id号来杀死窗口。
清除死去窗口
通过命令screen -wipe
这个命令将自动清除所有处于dead状态的窗口
1 | -(instancetype)init { |
1 | -(void)layoutSubviews { |
1 | UIWindow *window = [UIApplication sharedApplication].keyWindow; |
1 | - (void)cancleButtonClick { |
1 | - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ |
UIVIew的时候步骤:
1、新建一个继承UIVIew的类;
2、在实现文件中添加子控件(weak声明);
3、重写- (instancetype)initWithFrame:(CGRect)frame初始化子控件但不设置子控件frame;
4、重写- (void)layoutSubviews,设置子控件frame,记得一定要写[super layoutSubviews];
5、提供一个模型属性,在该模型的set方法中为子控件赋值;