天道酬勤

私信 关注
土豆吞噬者
码龄11年
  • 367,597
    被访问量
  • 340
    原创文章
  • 9,308
    作者排名
  • 857
    粉丝数量
  • 于 2010-03-29 加入CSDN
获得成就
  • 获得105次点赞
  • 内容获得35次评论
  • 获得320次收藏
荣誉勋章
TA的专栏
  • C/C++
    108篇
  • Docker
    1篇
  • Golang
    20篇
  • Java
    3篇
  • PHP
  • Swift
    28篇
  • Objective-C
    17篇
  • Python
    8篇
  • JavaScript
  • 计算机
    1篇
  • 算法
    5篇
  • 软件架构
    2篇
  • 编程规范
    3篇
  • 网络编程
    10篇
  • Windows
    14篇
  • Linux
    4篇
  • Android
    48篇
  • iOS
    39篇
  • Unity
    4篇
  • Qt
  • Git
    5篇
  • 信息安全
    2篇
  • 数学
    4篇
  • 励志
    10篇
  • 运营
  • 生活知识
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

docker中ptrace失败的解决方法

在docker容器中使用ptrace会报Operation not permitted的错误,需要在docker run 命令中加上参数–cap-add=SYS_PTRACE
原创
318阅读
0评论
0点赞
发布博客于 6 月前

Linux下移除和添加pci设备

移除pci设备echo 1 > /sys/bus/pci/devices/0001:01:00.0/remove重新添加pci设备echo 1 >/sys/bus/pci/rescan
原创
627阅读
0评论
0点赞
发布博客于 6 月前

解决media.codec: libminijail: blocked syscall:xxxx问题

在Android中使用软编码时遇到了下面的错误:E/media.codec: libminijail: blocked syscall: geteuid32原因是Android系统使用seccomp机制限制了mediacodec执行某些系统调用,我们可以通过修改/system/etc/seccomp_policy/mediacodec-seccomp.policy将geteuid32设置为允许执行。...
原创
251阅读
0评论
0点赞
发布博客于 6 月前

Git换行符问题

不同系统使用的换行符不一样,UNIX/Linux ,Mac OS使用 0x0A(LF)作为换行符,Windows 使用 0x0D0A(CRLF) 作为换行符。在跨平台开发时,换行符发生改变,Git 会认为整个文件被修改,这就造成我们没法diff,我们可以通过配置autocrlf用于在提交和检出时自动转换换行符。# 提交时转换为LF,检出时转换为CRLFgit config --global core.autocrlf true# 提交时转换为LF,检出时不转换git config --globa
原创
97阅读
0评论
0点赞
发布博客于 6 月前

在xorg.conf中使用BusID指定device的局限性

在xorg.conf中使用BusID指定device时,有可能出现找不到device的情况,原因是BusID格式为domain????device:function,而xorg.conf中的BusID字段格式为bus:device:function,不能指定domain这个时候可以使用ChipID来指定device,例如下面显卡的ChipID为0x63c3# inxi -GxxGraphics: Card-1: xxxxxxx bus-ID: 0000:01:00.0 chip
原创
164阅读
0评论
0点赞
发布博客于 6 月前

Linux下CPU和GPU频率调整

查看cpufreq模式cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor修改cpufreq模式echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor查看gpu性能级别cat /sys/class/drm/card*/device/power_dpm_force_performance_level修改gpu性能级别echo hi
原创
640阅读
0评论
0点赞
发布博客于 6 月前

使用JEB调试Android App

1. 开发App我们首先开发一个简单的App,输入123456就提示成功,否则提示失败。public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(saved...
原创
727阅读
1评论
0点赞
发布博客于 1 年前

Java中RSAPublicKey在不同平台的差异性

最近在逆向某Android App的时候复制了里面一段Java写的RSA解密代码,把它放在Windows上执行,结果发现解密失败,刚开始以为是密文数据或者公钥数据弄错了,调试了下发现密文数据或者公钥数据都没问题,问题发生在通过公钥数据生成公钥,在Window上生成的公钥是Sun RSA public key,在Android上生成的公钥是OpenSSLRSAPublicKey,原因可能和Jdk版本...
原创
954阅读
0评论
0点赞
发布博客于 1 年前

最近在逆向某Android App的时候复制了里面一段Java写的RSA解密代码,把它放在Windows上执行,结果发现解密失败,刚开始以为是密文数据或者公钥数据弄错了,调试了下发现密文数据或者公钥数据都没问题,问题发生在通过公钥数据生成公钥,在Window上生成的公钥是Sun RSA public key,在Android上生成的公钥是OpenSSLRSAPublicKey,原因可能和Jdk版本有关系:Window上使用的是SunJdk,Android上使用的是OpenJdk。

 
发布Blink于 1 年前

简单封装UnityWebRequest

WebProviderusing System;using System.Collections;using UnityEngine;using UnityEngine.Networking;using Newtonsoft.Json;public class WebProvider:MonoBehaviour{ private static readonly JsonSe...
原创
212阅读
0评论
0点赞
发布博客于 2 年前

使用compileOnly依赖jar包,却仍然参与打包的问题

1.删除implementation fileTree(dir: ‘libs’, include: [’*.jar’])2.使用compileOnly引入编译时需要但不打包的jar
原创
1046阅读
0评论
0点赞
发布博客于 2 年前

解决Unity导入aar或jar出现的Program type already present: com.xx.BuildConfig问题

原因:当Unity导入的aar或jar包名和项目包名一样的话,BuildConfig会出现冲突。解决方法:在aar/jar的build.gradle中添加下面的代码禁止生成BuildConfig即可。afterEvaluate { generateReleaseBuildConfig.enabled = false generateDebugBuildConfig.enable...
原创
2096阅读
1评论
0点赞
发布博客于 2 年前

在Linux上部署程序

nohup &程序在Linux上运行时,如果关闭session,程序会因为收到SIGHUP信号结束,使用nohup可以免疫该信号。如果使用Ctrl+C,程序会因为收到SIGINT信号结束,使用&可以免疫该信号。nohup和&常常一起使用,这个时候会同时免疫SIGHUP和SIGINT信号:nohup command &systemdsystemd是Linu...
原创
161阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-测试

Go的标准库提供了几个与测试有关的库,其中最主要的是testing包,testing包需要与go test命令以及源代码中所有以_test.go后缀结尾的测试文件一同使用,一般测试文件的名字都会与被测试源码文件的名字相对应,例如main.go的测试文件名为mian_test.go。功能测试为了测试源代码,我们需要在测试文件中创建具有以下格式的测试函数,其中Xxx首字符必须是大写的英文字母,在测...
原创
80阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-Context

有时候一个功能可能涉及多个goroutine的调用,当该功能中途需要取消时,需要通知其它goroutine,这个时候Context就可以派上用场了,Context主要用来处理退出通知以及上下文数据传递问题。Context之间被设计为父子关系,要创建Context,首先要创建根节点,通常是context.Background(),该Context不能被取消,没有值,也没有过期时间。有了根节点后,...
原创
58阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-定时器

Timer使用time.NewTimer()创建Timer后,经过其指定的时间后,它会向其管道发送当前时间。time.After()也是创建Timer,不过返回值不是Timer而是其管道。package mainimport ( "fmt" "sync" "time")func main(){ //5秒后将当前时间发送给管道 timer:=time.NewTimer(t...
原创
54阅读
0评论
0点赞
发布博客于 2 年前

使用Gson解析含有动态key的Json

使用Gson解析Json时,有时候会遇到key不是固定的情况,这个时候可以把它当做是一个Map。{ "students":{ "101":{ "name":"xiao hong", "age":10 }, "102":{ "name":"xiao ming", ...
原创
611阅读
1评论
2点赞
发布博客于 2 年前

Unity接入友盟遇到的坑

现象:一切正常,但后台无数据,查看日志没有发现send log:succeed。原因:只添加了android.permission.INTERNET权限,没有添加android.permission.ACCESS_NETWORK_STATE,android.permission.ACCESS_WIFI_STATE,android.permission.READ_PHONE_STATE等权限。...
原创
311阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-反射

反射让我们可以在运行时获取对象的类型信息,比如查看一个结构体有多少字段,查看函数的入参类型和返回值类型等。Go提供了reflect.TypeOf()和reflect.ValueOf获取任意对象的reflect.Value和reflect.Type,其中reflect.Type是一个接口类型,该接口提供了很多方法让我们获取类型信息,而reflect.Value是一个结构体,它提供了很多方法让我们获...
原创
85阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-sync

Mutexsync.Mutex为互斥锁,同一时间只能有一个goroutine获得互斥锁。使用Lock()加锁,Unlock()解锁,加锁前不能解锁,加锁后不能继续加锁。已经锁定的 Mutex 并不与特定的 goroutine 相关联,可以利用一个 goroutine 对其加锁,再利用其他 goroutine 对其解锁。适用于同一时间只能有一个goroutine访问资源的场景。下面的代...
原创
64阅读
0评论
0点赞
发布博客于 2 年前

数学学习笔记-三角函数

圆的一周的弧度数为2π,360°角=2π弧度,1°为π/180弧度。在下面的直角三角形中,角A的对边为正对着的那个边a,角A的邻边为另外一条直角边b,角A的斜边为斜边c。​​​​其中正弦sin(A)=对边/斜边余弦cos(A)=邻边/斜边正切tan(A)=对边/邻边正割csc(A)=1/sin(A)余割sec(A)=1/cos(A)余切cot(A)=1/tan(A)...
原创
199阅读
0评论
0点赞
发布博客于 2 年前

数学学习笔记-函数

函数是将一个对象转换为另外一个对象的规则,例如f(x)=x2f(x)=x^2f(x)=x2,其中x的取值被称为输入,结果被称为输出。所有输入来自称为定义域的集合,所有输出来自称为上域的集合。假设现在有两个函数fff,ggg,这两个函数的规则一样,且函数ggg的定义域小于fff的定义域,我们可以说函数ggg是由限制fff的定义域产生的。所有可能的输出所组成的集合称为值域,例如f(x)=x2f(...
原创
69阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-zerolog

zerolog是一个高性能,支持日志等级,钩子的结构化日志库。log的Print()和Printf()方法默认输出到os.Stderr,默认日志等级为debug,用法和官方log库相同。package mainimport ( "github.com/rs/zerolog" "github.com/rs/zerolog/log")func main(){ zerolog.Tim...
原创
482阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-flag

使用flag包可以用来解析命令行参数,flag.TypeVar()用于定义参数并绑定到指定变量,flag.Type()用于定义参数并将参数绑定到返回的指针,定义时可以指定参数名称,默认值,使用说明。定义完参数后调用flag.Parse()进行解析,flag.PrintDefaults()用于打印所有已定义参数的默认值和使用说明。命令行参数的语法有如下三种形式,其中前面的减号可以是两个,整数类型可...
原创
64阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-go mod

环境变量设置环境变量GO111MODULE可设置三种值:on,off,auto,off表示使用GOPATH模式,on表示开启模块支持,根据go.mod下载和查找依赖,auto(默认值)表示根据当前目录启用或禁用模块支持,仅当当前目录位于$GOPATH/src之外并且其本身包含go.mod文件或位于包含go.mod文件的目录下时,才启用模块支持。环境变量GOPROXY可设置下载依赖时使用的代理,...
原创
77阅读
0评论
0点赞
发布博客于 2 年前

内存对齐的作用

为什么需要对齐CPU读取内存粒度一般是2,4,8,16字节,当CPU读取非对齐内存时,有可能需要两次访问,而对齐内存只需要一次。假设下面的结构体是按1字节对齐,CPU读取内存粒度为4,那么当访问数据成员c时,CPU需要先读取前4个字节的内容,然后再读取后4字节的内容。struct TestStruct { char a; short b; short c;};不是所有的硬...
原创
124阅读
0评论
0点赞
发布博客于 2 年前

C++ shared_mutex

C++ sharedmutex
原创
4838阅读
0评论
0点赞
发布博客于 2 年前

帧同步手游设计要点总结

通信协议的选择由于tcp在网络不稳定时延迟严重,所以我们需要udp通信。由于udp的不可靠的特点,前期我们可以使用 使用别人封装好的可靠的udp协议,例如使用很广的kcp协议。如果发现kcp仍然不能满足我们的实时性要求,我们可以直接使用udp协议,自己控制丢包,乱序问题,例如每次发包都带上前两帧的数据以保证最大程度的低延迟,每次都发送两次udp包等。据说kcp+fce(前向纠错码)效果很好,...
原创
175阅读
1评论
0点赞
发布博客于 2 年前

正交相机与透视相机的区别

正交,三只羊一样大透视,三只羊大小不一样
原创
2122阅读
1评论
2点赞
发布博客于 2 年前

Python学习笔记-函数

Python中函数以def关键词开头,后接函数标识符名称,圆括号括起来的参数列表,冒号。函数体内的return如果不带表达式或者没有return相当于返回None。函数体最前面可以使用字符串描述函数功能。def add(n1,n2): "这是一个加法函数" return n1+n2def add(n1,n2): """ 这是一个加法函数 :param ...
原创
62阅读
0评论
0点赞
发布博客于 2 年前

Python学习笔记-迭代器与生成器

迭代器时访问集合元素的一种方式,迭代器对象从集合的第一个元素开始访问,直到所有元素被访问,迭代器只能往前不会后退。list=[1,2,3,4]it=iter(list)print(next(it)) # 1print(next(it)) # 2通过迭代器对象遍历:list=[1,2,3,4]it=iter(list)for value in it: print(val...
原创
64阅读
0评论
0点赞
发布博客于 2 年前

Python学习笔记-条件语句,循环语句

if语句Python中没有switch语句,条件语句只能用if:value=100if value>90: print("A")elif value>80: print("B")elif value>60: print("C")else: print("D")while语句while循环中只有一条语句时,你可以将该语句与while...
原创
81阅读
0评论
0点赞
发布博客于 2 年前

Python学习笔记-列表和元组

列表写在方括号里,元素之间用逗号隔开,列表中元素的类型可以不相同。和其它序列一样(字符串,元组),列表可以索引,切片,加,乘,检查成员。value=["hello",1024,3.14,True]print(value)#['hello', 1024, 3.14, True]print(value[1:-1])#[1024, 3.14]print(value*2)#['hello', 10...
原创
81阅读
0评论
0点赞
发布博客于 2 年前

Python学习笔记-字符串

在Python中,字符串用单引号或双引号括起来,同时使用反斜杠 \ 转义特殊字符,如果你不想让反斜杠发生转义,可以在字符串前面添加一个 r,表示原始字符串。print("hello world")print('hello world
')print(r"hello world
")hello worldhello worldhello world
字符串中可以使用反斜杠作...
原创
55阅读
0评论
0点赞
发布博客于 2 年前

Python学习笔记-数字

Python支持整型(Int),浮点型(float) ,复数(complex),True 和 False 定义成关键字了,它们的值是 1 和 0,可以和数字相加。Python中的整型不限制大小。复数由实数部分和虚数部分构成,可以用a + bj或complex(a,b)表示, 复数的实部a和虚部b都是浮点型。类型转换使用int(x)将x转换为一个整型,float(x)将x转换为一个浮点数。pr...
原创
94阅读
0评论
0点赞
发布博客于 2 年前

Python学习笔记-集合和字典

Python一共有六个基本数据类型,其中不可变类型有三种:Number(数字),String(字符串),Tuple(元组),可变数据类型有三种:List(列表),Dictionary(字典),Set(集合)。数字Python支持整型(Int),浮点型(float) ,复数(complex),True 和 False 定义成关键字了,它们的值是 1 和 0,可以和数字相加。Python中的整型不...
原创
109阅读
0评论
0点赞
发布博客于 2 年前

Git学习笔记-标签

Git学习笔记-标签
原创
91阅读
0评论
0点赞
发布博客于 2 年前

Git学习笔记-分支

Git学习笔记-分支
原创
98阅读
0评论
0点赞
发布博客于 2 年前

Git学习笔记-基础操作

获取Git仓库你可以使用git init新建Git仓库对现有项目进行管理,或者使用git clone克隆一个已存在的Git仓库,克隆时可以自定义本地仓库的名字。git initgit add *.c$ git clone https://github.com/xiongya000/AndroidSignTool.git apktoolCloning into 'apktool'......
原创
93阅读
0评论
0点赞
发布博客于 2 年前

Python学习笔记-基础知识

注释Python中单行注释以#开头,多行注释可以用多个#号,或者三个单引号或双引号。#我是注释#我也是注释"""我也是注释"""'''我也是注释'''行与缩进Python使用缩进空格数来识别代码块而不是大括号,同一个代码块的语句必须包含相同的缩进空格数。if True: print("hello world")else: print("hello ya"...
原创
78阅读
0评论
0点赞
发布博客于 2 年前

Git学习笔记-基础知识

git的使用
原创
65阅读
0评论
0点赞
发布博客于 2 年前

软件设计原则

单一职责原则(SRP)任何一个软件模块都应该只对某一类行为者负责,将不同行为者所依赖的代码放在一起容易引起混乱。开闭原则(OCP)一个设计良好的计算机系统应该在不需要修改的前提下就可以轻易被扩展,例如要增加一个功能时,可以增加代码,而尽量少修改旧代码,甚至不修改旧代码。如何做到这一点呢,我们可以利用单一职责原则将代码分组,然后调整这些分组之间的依赖关系,使得高级组件不会因为低级组件被修改受...
原创
57阅读
0评论
0点赞
发布博客于 2 年前

C++ atomic和memory_order

使用atomic可以保证数据读写的原子性,虽然mutex也能做到,但atomic的性能更好。atomic支持的类型有布尔类型,数值类型,指针类型,trivially_copyable类。定义atomic时应该给一个初始值来初始化,或者调用atomic_init方法来初始化。atomic<bool> readyFlag(false);atomic<bool> read...
原创
892阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-并发

goroutinegoroutine是Go内置的轻量级线程,它的调度由Go运行时管理,调用函数时前面加上关键字go就可以让函数在goroutine中执行。func print123(){ for i:=0;i<3;i++{ time.Sleep(time.Millisecond*100) fmt.Println(i+1) }}func...
原创
70阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-接口和错误

接口Go接口定义了方法后,其它类型只要实现了这些方法就是实现了接口。type Person interface { speak()}type Student struct {}type Worker struct {}func (student Student) speak(){ println("I am student")}func (worke...
原创
68阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-map

Map是一些键值对的集合,可以使用内置函数make或map关键字来定义Map:var map_variable map[key_data_type]value_data_typemap_variable := make(map[key_data_type]value_data_type)func main() { var numberMap map[string] int ...
原创
62阅读
0评论
0点赞
发布博客于 2 年前

C++ call_once和condition_variable

有些功能我们只需要或者必须只调用一次,在单线程环境下,通过判断一个bool flag即可:bool g_inited;int main(){ if (!g_inited) { g_inited = true; //...init } system("pause");}而在多线程环境下,这些只需要调用一次的功能有可能会被多次调用,你可以使用mutex,但C++标准库提供了...
原创
47阅读
0评论
0点赞
发布博客于 2 年前

C++ mutex和lock

Mutex用来协助采取独占方式控制对资源的并发访问,这里的资源可能是一个对象,或多个对象的组合,为了获得独占式的资源访问能力,相应的线程必须锁定Mutex,这样可以防止其它线程也锁定该Mutex。下面两条线程如果没有使用Mutex来同步,则输出结果会是112233。mutex g_mutex;void print123() { g_mutex.lock(); for (int i =...
原创
5276阅读
0评论
2点赞
发布博客于 2 年前

使用Android Studio制作.9图

.9图制作
原创
123阅读
0评论
0点赞
发布博客于 2 年前

Android中使用Scheme协议打开App

android scheme跳转拦截
原创
698阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-结构体

定义结构体的格式如下:type struct_variable_type struct { member definition; member definition; ... member definition;}type Book struct { id int name string author string}初始化结构体的格式如...
原创
93阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-数组和切片

Go数组声明需要指定元素类型以及元素个数,格式如下:var variable_name [SIZE] variable_typevar values [10] intGo使用大括号初始化数组中的元素,如果元素没有指定初始值,默认为零值。func main() { var values=[10] int{1,2,3,4} println(values[0])//1 ...
原创
101阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-函数

Go函数定义格式如下:func function_name( [parameter list] ) [return_types] { 函数体}例如:func add(n1, n2 int) int{ return n1 + n2}Go函数可以返回多个值,这个时候返回值类型要用括号括起来,例如:func div(n1, n2 int) (int,int){ return ...
原创
87阅读
0评论
0点赞
发布博客于 2 年前

C++ std::this_thread

this_thread
原创
1929阅读
0评论
2点赞
发布博客于 2 年前

Qt信号槽

信号和槽机制是 QT 的核心机制,所有从 QObject 或其子类 ( 例如 Qwidget) 派生的类都能够包含信号和槽。当对象改变其状态时,信号就由该对象发射 (emit) 出去,这就是对象所要做的全部事情,它不知道另一端是谁在接收这个信号。槽用于接收信号,但它们是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且,对象并不了解具体的通信机制。你可以将很多信号与单个的槽进行连...
原创
143阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-条件语句,循环语句

Go的条件语句,循环语句和C很像,不同的是Go的条件表达式可以不用括号扩起来,除此之外还有这些不同:switch语句switch分支中的代码执行完后会跳出switch代码块,如果我们需要执行后面的 case,可以使用fallthrough。func main() { a:=1 switch a { case 0: fmt.Println("a is 0...
原创
172阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-变量,常量,运算符

变量Go变量命名和C语言一样,由字母、数字、下划线组成,其中首个字符不能为数字,声明变量的形式为:var identifier typevar identifier1, identifier2 type例如:var strValue stringvar intValue1,intValue2 int如果没有初始化,则变量默认为零值(数值类型为0,布尔类型为false,字符串为空字...
原创
105阅读
0评论
0点赞
发布博客于 2 年前

C++并发低层接口std::thread和std::promise

std::thread用于启动和处理线程,相比高级接口std::async,它不提供这些性质:thread没有启动策略,它创建后就会尝试启动一个新线程执行任务,如果不能启动新线程则产生异常。thread没有接口可处理线程结果。如果线程中有未被处理的异常,程序会立刻终止,要想将异常传播到线程外,可以使用exception_ptr。在thread销毁前你必须调用join方法等待线程结束或de...
原创
93阅读
0评论
0点赞
发布博客于 2 年前

UITextField默认输入法不是简体拼音的问题的解决方法

今天遇到一个诡异的问题,某页面的UITextField的默认输入法不是简体拼音,而在该页面新建一个UITextField又是正常的,用新的UITextField替换旧的然后删除旧的,你会发现新的UITextField又不正常了。最后我用了一个很龊的解决方法,用新的UITextField替换旧的,将旧的UITextField的width和height都修改为1(隐藏或将width和height修改...
原创
309阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-基本类型

整型类型名称有无符号大小int8是1字节int16是2字节int32是4字节int64是8字节uint8否1字节uint16否2字节uint32否4字节uint64否8字节int是编译的目标平台为32位时占4字节,64位占8字节uint否编译的目标平台为32位时占4字节,64位占8...
原创
69阅读
0评论
0点赞
发布博客于 2 年前

编程范式

结构化编程结构化编程采用顺序结构,分支结构,循环结构代替goto语句,它对程序控制权的直接转移进行了限制和规范。面向对象编程面向对象编程中有三个概念:封装,继承,多态,这些特性并不是面向对象编程所独有的,在C语言中也能实现这三种特性:封装:头文件和源文件也是封装的一种,头文件暴露接口,源文件隐藏实现细节。继承:如果A结构体和B结构体前面的结构一样,那么我们可以说B继承了A。多态:使用...
原创
73阅读
0评论
0点赞
发布博客于 2 年前

iOS多线程之GCD的使用

串行队列和并行队列在系统底层,程序是运行在线程之中的,为了简化线程操作,GCD封装了队列的概念用来处理任务。串行队列一般只分配一个线程,所有任务按照进入的先后顺序来处理,并行队列至少分配一个线程,多个任务可以同时处理。创建队列convenience init(label: String, qos: DispatchQoS = .unspecified, attributes: Dispatc...
原创
59阅读
0评论
0点赞
发布博客于 2 年前

C++并发高级接口std::async和std::future

std::async()可以让一个可调用对象在一个独立线程中运行,std::future<>允许你等待线程结束并获取其结果,下面代码中,async()尝试将函数立刻异步启动于一个分离的线程,然后返回一个future对象允许你取得函数结果或异常。当future对象的get()被调用时,以下三种事情之一会发生:如果函数被async()启动于一个分离线程中并且已结束,你会立刻获得结果。...
原创
515阅读
0评论
0点赞
发布博客于 2 年前

Android中Activity的四种启动模式

onNewIntent()如果启动Activity时不创建新的实例而是重用之前的实例,则会调用onNewIntent()方法。standard标准模式,也是Activity的默认模式,这种模式下的Activity可以被多次实例化。singleTop栈顶复用模式,如果Activity处于栈顶,再次启动这个Activity时,不会创建新的实例,而是重用位于栈顶的实例。singleTask...
原创
44阅读
0评论
0点赞
发布博客于 2 年前

解决安装App后点击打开引起的问题

问题项目发版当晚发现的:安装完APP后直接点击打开,接着Home键退到后台,再次打开App 时发现重启了。试了一下去哪儿,陌陌等几个主流app,也有这个问题原因The Launcher starts an app using an intent with android.intent.action.MAIN action and android.intent.category.LAUNCH...
原创
420阅读
0评论
1点赞
发布博客于 2 年前

拦截Android App中的域名解析

在App使用域名访问网络时,域名解析是网络请求的第一步,该过程有时候会出现解析慢或域名劫持的情况。我们可以通过拦截域名解析直接返回自定义的IP或者使用HTTPDNS解析域名,如果App使用的是OKHttp,可以直接使用OKHttp的DNS接口进行拦截。如果App访问网络的库没没有提供类似OKHttp的DNS接口,我们还可以通过hook getaddrinfo和android_getaddrin...
原创
818阅读
0评论
0点赞
发布博客于 2 年前

ViewModel的生命周期

ViewModel的生命周期依赖于对应的Activity的生命周期,通常会在Activity第一次onCreate()时创建ViewModel,Activity在生命周期中可能会触发多次onCreate()(例如配置发生变化),而ViewModel只会在第一次onCreate()时创建,ViewModel的生命周期一直持续到Activity最终销毁。...
原创
2023阅读
1评论
1点赞
发布博客于 2 年前

ViewController跳转的两种方式

模态跳转使用present可以以模态方式显示ViewController,当ViewControllerA以模式方式显示ViewControllerB后,ViewControllerA的presentedViewController属性会设置为ViewControllerB,ViewControllerB的presentingViewController属性会设置为ViewControllerA...
原创
207阅读
0评论
0点赞
发布博客于 2 年前

注释规范

注释的作用是弥补我们在用代码表达意图时遭遇的失败,如果你发现自己需要写注释,说明你的代码的表达能力不够,这个时候应该想下能否使用更好的代码来表达。代码在变动,但是注释不总是随之变动,随着时间的流逝,注释常常用其所描述的代码分隔开来,越来越不准确,与其把精力放在维护注释上还不如把力气用在写清楚代码。不准确的注释不如没注释,只有代码能忠实地告诉你它做的事,所以,尽管有时候也需要注释,我们也应该多花...
原创
57阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-基础知识

包Go源文件中非注释的第一行需要指明这个文件属于哪个包,每个 Go 应用程序都包含一个名为 main 的包,package main表示一个可独立执行的程序。要使用其它包的代码需要使用import引入包。package mainimport ( "fmt")func main() { fmt.Println("Hello, World!")}标识符当标识符(...
原创
81阅读
0评论
2点赞
发布博客于 2 年前

__bridge,__bridge_retained,__bridge_transfer

https://blog.csdn.net/geekdonie/article/details/44437949
原创
57阅读
0评论
0点赞
发布博客于 2 年前

使用Xcode Instruments Leak检测内存泄漏

https://www.jianshu.com/p/db504d233176
原创
858阅读
0评论
0点赞
发布博客于 2 年前

函数规范

函数要尽可能的短小,最好不要超过20行。函数应该只做一件事,如果函数只是做了函数名下同一抽象层上的步骤,则函数还是只做了一件事。如果函数还能再拆出一个函数,说明这个函数不止做了一件事,被拆出的函数不仅只是单纯地重新诠释其实现,而是又生成了另外一个抽象层。函数中的语句最好在同一抽象级上,而不是既有高等抽象概念(例如调用封装好的接口),又有低等抽象概念(例如直接操作数据)。...
原创
166阅读
0评论
1点赞
发布博客于 2 年前

UIDeviceOrientation和UIInterfaceOrientation

http://www.cocoachina.com/articles/19808
原创
206阅读
0评论
0点赞
发布博客于 2 年前

UISearchBar取消按钮不可用的解决方法

1.UIView或者继承UIView的都有endediting方法,调用这个,不会失去焦点,但是会收回键盘2.放弃uisearchbar焦点时,设置取消按钮的enable位true
原创
409阅读
0评论
0点赞
发布博客于 2 年前

App Store审核被拒原因以及解决方案总结

App Store审核被拒解决方案总结
原创
203阅读
0评论
0点赞
发布博客于 2 年前

Swift,Objective-C,C,C++混合编程

swift/C/C++/OC混编
原创
93阅读
0评论
0点赞
发布博客于 2 年前

MSVC编译器的选择(x86,amd64_x86,amd64,x86_amd64)

https://blog.csdn.net/WL2002200/article/details/52984241/结论32/64 位系统编译在32位系统上运行 => x8632 系统上编译64位系统上运行 => x86_amd6464 系统上编译在64位系统上运行 => amd64解释注:以下引自MSDNThe following list describes th...
原创
3641阅读
0评论
2点赞
发布博客于 2 年前

Cydia不能联网的解决方法

cydia联网问题
原创
2090阅读
0评论
0点赞
发布博客于 2 年前

使用Cydia Impactor免越狱安装ipa

cydiaimpactor
原创
6445阅读
0评论
0点赞
发布博客于 2 年前

Golang学习笔记-交叉编译

Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序,最近使用了一下,非常好用,这里备忘一下。Mac 下编译 Linux 和 Windows 64位可执行程序CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.goCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go...
原创
148阅读
0评论
0点赞
发布博客于 2 年前

代码命名规范

有意义的命名代码中的命名应该名副其实,使人一眼看上去就知道是它们为什么存在,做什么事,应该怎么用,如果需要注释来补充,就不算是名副其实,一旦你发现有更好的名称就应该换掉旧的名称。代码中的命名应该避免误导,应当避免使用与本意相悖的词,例如使用bookList来表示一组书籍,除非它真的是List类型,否则会引起错误的判断,这个时候使用bookGroup或books更好。代码中的命名应该做有意义...
原创
1479阅读
0评论
0点赞
发布博客于 2 年前

支持水平和垂直滚动的UICollectionViewLayout

class CollectionViewGridLayout:UICollectionViewLayout{ @IBInspectable var cellWidth:CGFloat=50 @IBInspectable var cellHeight:CGFloat=50 @IBInspectable var verticalSpacing:CGFloat=1 ...
原创
293阅读
0评论
0点赞
发布博客于 2 年前

使用Golang转发HTTP流数据

package mainimport ( "fmt" "net/http")func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { _, _ = w.Write([]byte("fm transfer")) }) http.HandleFunc("/fm", hand...
原创
2556阅读
0评论
0点赞
发布博客于 2 年前

设置LaunchScreen.storyboard竖屏显示

有时候我们希望App启动页竖屏显示,其它页面既可以竖屏又可以横屏,而在使用LaunchScreen.storyboard作为启动页时,由于LaunchScreen.storyboard无法使用自定义的ViewController,所以也没办法覆盖supportedInterfaceOrientations属性来修改启动页支持的界面方向,这个时候我们可以将Info.plist设置为仅竖屏显示,然后在...
原创
2782阅读
0评论
0点赞
发布博客于 2 年前

解决UITabBarItem图标不是彩色的问题

将图标的Render As由Default设置为Original Image即可。
原创
75阅读
0评论
0点赞
发布博客于 2 年前

iOS App四种发布方式的区别

ios上架打包流程
原创
1022阅读
0评论
0点赞
发布博客于 2 年前

Android中ScrollView常见问题

https://www.jianshu.com/p/3e710a5ee50b
原创
544阅读
0评论
0点赞
发布博客于 2 年前

Android使用R8压缩,混淆,优化App

android代码混淆规则以及基本设置
原创
5286阅读
0评论
2点赞
发布博客于 2 年前

Android中ABI和CPU的关系

https://www.veryarm.com/6601.html
原创
529阅读
0评论
0点赞
发布博客于 2 年前

UIView的常见使用方法

UIButton不能点击情况的第二种是,你对button修改frame时,出现button的frame超过了父View的frame。这种情况也会导致button点击不能触发点击事件,这种情况只需要重新就该button的frame,并让button的frame不超过父View的frame。...
原创
212阅读
0评论
1点赞
发布博客于 2 年前

iOS上使用Quartz 2D绘制Bitmap

浮点数转换为整形出错导致画面显示问题计算像素内存起始地址时,浮点数转换为整形时出错,导致不是4的倍数,导致画面出错
原创
100阅读
0评论
1点赞
发布博客于 2 年前

设置socket connect超时时间的几种方法

BSD内核:TCP_CONNECTIONTIMEOUTlinux内核:TCP_SYNCNT
原创
9459阅读
1评论
4点赞
发布博客于 2 年前

iOS证书信任设置

下载证书后去设置=>通用=>描述文件安装描述文件。设置=>通用=>关于本机=>证书信任设置=>信任证书
原创
3695阅读
1评论
0点赞
发布博客于 2 年前

记录一个绘图花屏的低级错误

Bitmap数据为一个像素4个字节(ARGB),计算偏移时x坐标没有乘以4,导致图像错位,且x不是4的倍数时ARGB顺序会出错导致花屏。
原创
127阅读
0评论
0点赞
发布博客于 2 年前

域名解析中的A记录,AAAA记录,CNAME记录,MX记录,NS记录,TTL值

Incapsula cloudflare域名解析原理与知识
原创
2027阅读
1评论
2点赞
发布博客于 2 年前

通过Xcode安装ipa

透過 Xcode 的 Devices and Simulators 視窗,將 .ipa 拖曳進 INSTALLED APPS 去。直接將 .ipa 拖曳到 iTunes 左側邊欄的 iOS 裝置名稱中,此方式僅適用於 Ad Hoc 版本。(2019.5.31更新 — — 在某些機型拖曳方式不適用,但是仍然可以在 Finder (Windows 則是檔案總管)選擇 .ipa 檔、右鍵拷貝,然後在 ...
原创
713阅读
0评论
1点赞
发布博客于 2 年前

Android系统权限

使用权限如果应用AndroidManifest.xml中列出正常权限,系统会自动授予这些权限,如果是危险权限,系统会要求用户明确授予这些权限。Android 发出请求的方式取决于系统版本和应用的targetSdkVersion:如果设备运行的是 Android 6.0(API 级别 23)或更高版本,并且应用的 targetSdkVersion 是 23 或更高版本,则应用需要在运行时向用户...
原创
68阅读
0评论
0点赞
发布博客于 2 年前

Android模拟器设置代理

https://blog.csdn.net/xc_zhou/article/details/86615466长按wifi名称,编辑wifi代理设置
原创
3534阅读
0评论
0点赞
发布博客于 2 年前

gradle版本修改

1.修改gradle-wrapper.properties中的distributionUrldistributionUrl=https://services.gradle.org/distributions/gradle-4.4-all.zip2.修改build.gradle中的buildscript { repositories { google() ...
原创
1866阅读
0评论
2点赞
发布博客于 2 年前