HTTP协议中,规定的HTTP请求方法大致有:
GET/POST/PUT/PATCH/DELETE/
COPY/HEAD/OPTIONS/LINK/UNLINK/PURGE/
LOCK/UNLOCK/PROPFIND/VIEW
其中我们最常用的有 GET/POST/PUT/PATCH/DELETE 这五种,而本文选取其中最典型的 POST 请求提交数据的方法进行探讨分析.
more >>资质平庸,认知局限
HTTP协议中,规定的HTTP请求方法大致有:
GET/POST/PUT/PATCH/DELETE/
COPY/HEAD/OPTIONS/LINK/UNLINK/PURGE/
LOCK/UNLOCK/PROPFIND/VIEW
其中我们最常用的有 GET/POST/PUT/PATCH/DELETE 这五种,而本文选取其中最典型的 POST 请求提交数据的方法进行探讨分析.
more >>more >>内存区域可分为栈,堆,静态存储区和常量存储区,对于常见的局部变量,函数形参,临时变量都是在栈上获得内存的,它们的获取方式都是通过编译器直接执行.
而利用指针来管理内存的时候,可以更加自由的像汇编一样处理内存的地址, C 标准函数库提供了很多函数来实现对堆上内存的管理,从开辟内存空间到释放内存空间都有相应的函数,这些函数都包含在头文件 stdlib.h 中,其中有几个特别重要的函数需要做区分和了解,它们分别是: malloc、alloc、calloc、realloc 以及 free,而对 malloc 和 free 的具体内容分析请移步C语言 malloc 和 free.这些函数之间的细微差别在于对内存的管理的细节和操作不同.
从函数名的字面上理解:这几个函数都带 alloc 也就是 allocate ,分配的意思. calloc() 是”分配内存给多个对象”, malloc() 是”分配内存给一个对象”, realloc() 是”重新分配内存”.
原型: extern void *malloc(unsigned int num_bytes)。
头文件: #include
功能:分配长度为 num_bytes 字节的内存块。
当内存不再使用时,应使用free()函数将内存块释放。
举例:
#include<stdio.h>
#include<malloc.h>
int main()
{
char *p;
p = (char *)malloc(100);
if(p)
printf("Memory Allocated at: %x/n",p);
else
printf("Not Enough Memory!/n");
free(p);
return 0;
}
more >>
现阶段对于自动布局来说,有一些很成熟的第三方框架,其中较为优秀的是 OC 有: SnapKit/Masonry 框架等. Swift 有: SnapKit/SnapKit 框架等.其本质上都是对 Apple 的 autolayout 的二次封装.提到 autolayout 就不得不提 autoresizing.
对于 autoresizing 需要注意的是 storyboard 中设置的约束和手码中设置的约束是相反的.
autoresizing 所体现的 autoresizingMasks 属性的枚举都是 flexible 可“伸缩”的, autoresizingMasks 的枚举一共有7个值:无/宽可伸缩/高可伸缩/左间距可伸缩/右间距可伸缩/上间距可伸缩/下间距可伸缩,对应的分别是:
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleWidth = 1 << 1,
UIViewAutoresizingFlexibleHeight = 1 << 4,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,
UIViewAutoresizingFlexibleRightMargin = 1 << 2,
UIViewAutoresizingFlexibleTopMargin = 1 << 3,
UIViewAutoresizingFlexibleBottomMargin = 1 << 5
每个枚举值都是位移枚举,可以在一行代码中传多个值。
有一个较为核心的思想提炼出来的一个公式,任何两个控件间的约束都可以通过这个公式算出:
obj1.property1 =(obj2.property2 * multiplier)+ constant value
multiplier 和 constant 就是向量系数和偏移量.
还有为了避免和系统生成的自动伸缩的约束不冲突一般加上这句代码:
view.translatesAutoresizingMaskIntoConstraints = NO;
translatesAutoresizingMaskIntoConstraints 属性系统默认这个属性是 YES.
约束改变添加动画注意事项:
由于约束的改变是瞬时操作,这和改变frame的动画的改变存在明显的差异,这里要把更新约束的代码放到动画的block里是无效的.从而必须要把约束写在外面,然后block里包裹 layoutIfNeed.
错误:
[UIView animateWithDuration:2.0 animations:^{
NSLayoutConstraint *width = [_constaints firstObject];
width.constant = 200;
}];
正确:
[UIView animateWithDuration:2.0 animations:^{
[self.view layoutIfNeeded];
}];
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true