: ClangFormat-Xcode[7] 通用C++命名约定 类以大写字母开头: MyClass。...使用nullptr C++11引入了nullptr表示空指针,应该用来代替0或NULL来指示空指针。 注释 注释块应该使用//,而不是/* */,使用//可以更容易的在调试时注释掉代码块。...忘记初始化成员会导致未定义行为错误,而这些错误通常很难发现。 如果成员变量在初始化后不会更改,则将其标记为const。...总是使用命名空间 几乎没有理由需要全局命名空间中声明标识符。相反,函数和类应该存在于适当命名的命名空间中,或者存在于命名空间里的类中。...放在全局命名空间中的标识符有可能与来自其他库(主要是没有命名空间的C库)的标识符发生冲突。
在C++中可以通过typeid这个关键字来获取对象的类描述信息(RTTI)对象的,C++的类描述类是一个type_info类。...前面说过老版本C++标准库中的所有类的定义都是在std这个命名空间中。...子命名空间中的 inline关键字则是C++11中为命名空间添加的新关键字:可以在父命名空间中定义内联的子命名空间,内联的子命名空间可以把其包含的名字导入到父命名空间中,从而在父命名空间中可以直接访问子命名空间中定义的名字...但是新版本的C++标准库中的所有符号都是在std::__1这个命名空间中,因此链接器将无法找到这个符号。...上述的内联命名空间的访问只是在编译时是没有问题的,但是在链接这个阶段是不会认内联命名空间的,链接阶段只认被修饰过后的符号,也就是在链接阶段是没有内联命名空间这个概念的。
前言 开发工具:XCode7.3.1 SDK版本:V1.7.1 一.APP提交审核 前期准备工作:可以参考这篇博文http://www.jianshu.com/p/839dc30f2250 iOS版本只需要提供...在调用sendRsp返回时,会切回到微信终端程序界面"); } // 如果第三方程序向微信发送了sendReq的请求,那么onResp会被回调。...解决办法.png 官方Demo:(直接运行官方的demo会报各种错误。。。...Version 7.3.1 (7D1014) 编译 # SDK1.7 1.支持兼容ipv6 2.修复若干问题增强稳定性 # SDK1.6.3 1.xCode7.2 构建的sdk包。...未命名图片.png 源码: https://github.com/andli0626/wx_sharedemo_for_iOS-V1.7.1.git 万事开头难,完成一个简单文本分享,后面的其他API
Vector虽然也支持下标访问,但是很多成员函数都是用的迭代器,所以我们要模拟实现的话迭代器十分重要,vs使用的是PJ版的STL版本,比较难懂,所以我们模拟实现统一用SGI版本去实现,所以在模拟实现之前...二,vector的模拟实现 大致框架需要有模板(类外定义)/迭代器以及迭代器的获取(public定义,要有可读可写的也要有可读不可写的)/成员变量(private定义) 并且为了不和库的vector...冲突,我们需要自己搞一个命名空间 namespace cyx { //模板 template //迭代器(可读可写) class vector { public: typedef T*...这就涉及到memcpy的拷贝问题 我们以上述问题来画图解释一下 总结: 1. memcpy是内存的二进制格式拷贝,将一段内存空间中内容原封不动的拷贝到另外一段内存空间中 2....和capacity //获取size size_t size() const { return _finish - _start; } //获取capacoty size_t capacity() const
前言 在之前,我向大家介绍了C语言中的一个常用的内存函数memcpy函数。如果你还没看的话,建议你先去看memcpy函数这篇文章,因为接下来,可能会用到那篇文章的知识甚至会拓展没有讲过的知识。...2. memmove()函数 memmove()函数的作用:将源空间的内容移动到目标空间上,也可以理解为将指定源空间的内容拷贝到目标空间中。...2.1 memmove()函数与memcpy()函数的差异 在我们用memcpy函数时,不知道大家有没有想过这么一个问题: int main() { int arr1[10] = { 1,2,3,4,5,6,7,8,9,10...事实上,这种行为在memcpy函数看来是属于未定义的行为(想要操作的同一个对象里的俩成员之间出现了内存交织的情况)。...这也正是导致memmove函数与memcpy函数的差异所在: memmove函数能够处理同一个对象里的俩成员间内存空间出现交织的情况,而这正是memcpy函数所做不到的 可能读者们听到这里还是有点懵逼
这有助于避免在发布版本中引入不必要的性能开销。 自定义错误消息:assert宏允许你提供一个可选的字符串作为错误消息,这有助于在断言失败时提供更多上下文信息。...命名空间 在编写string类之前,应该先设置一个命名空间,防止与std命名空间冲突 建议初学者命名空间都设置为自己的名字缩写,方便使用 namespace xny { class string...这意味着在这个实现中,字符串的初始容量等于其长度,没有预留额外的空间用于未来的增长。然而,这种设计在实际应用中可能不是最高效的,因为每次字符串增长时都可能需要重新分配内存。...由于之前已经通过成员初始化列表确保了这一点,所以这里的使用是安全的。 4. 析构函数 这里需要注意的是,添加一个判断_str是否为空的条件,避免出现释放空内存的情况。...这种写法是错误的,它会导致无穷递归,因为swap函数内部也在进行赋值运算,每次赋值都会调用swap函数,而每次swap也都会进行赋值 7.
+ end获取最后一个字符下一个位置的迭代器 rbegin + rend begin获取第一个字符的迭代器 + end获取最后一个字符下一个位置的迭代器 范围for C++11支持,最终替换成迭代器...会引起其底层空间改变的操作,都有可能是迭代器失效,比如:resize、reserve、insert、assign、push_back等 本质上:使vector发生扩容,原来动态开辟的空间被释放,但是迭代器在扩容后没有更新...,我们选择在命名空间里进行实现 实现代码: namespace cole { template class vector { public:...是内存的二进制格式拷贝,将一段内存空间中内容原封不动的拷贝到另外一段内存空间中 如果拷贝的是自定义类型的元素,memcpy即高效又不会出错,但如果拷贝的是自定义类型元素,并且自定义类型元素中涉及到资源管理时...,就会出错,因为memcpy的拷贝实际是浅拷贝 结论:如果对象中涉及到资源管理时,千万不能使用memcpy进行对象之间的拷贝,因为memcpy是浅拷贝,否则可能会引起内存泄漏甚至程序崩溃 4
因此,我们构建的成员变量部分代码如下: //设置命名空间,防止与库中的vector冲突 namespace mfc { template //因为我们使用vector中不只存储一种类型的数据.../将迭代器的内容逐一尾插进vector中 ++first; } } 实现vector析构函数 vector的析构函数逻辑和string类的很像,都是先释放之前动态开辟的空间,再将成员变量的迭代器指向空即可...在实现reserve()函数时,我们首先要判断n是否大于当前vector的容量,即判断这次reserve()函数的调用目的是"扩容"还是"缩容",因为调整容量的代价是需要重新开辟目标大小的空间并拷贝原本空间中的数据...= nullptr) { //copy data //当vector中存储的数据类型是不能浅拷贝的类型时,会出事 //vector确实没有浅拷贝,但是用memcpy拷贝的数据是浅拷贝的...= nullptr) { //copy data //当vector中存储的数据类型是不能浅拷贝的类型时,会出事 //vector确实没有浅拷贝,但是用memcpy
: std::endl // 命名空间 相当于 Java 中的 Package 包 , // 上面的 cout endl string 等都定义在 std 命名空间中 // 如果没有 using...: 下面的 cout 和 endl 定义在 std 命名空间中 //如果没有声明 using namespace std; , 就必须使用域作用符号 "::" 才能访问 //域作用符格式 :...void say_hi() { //注意 : 下面的 cout 和 endl 定义在 std 命名空间中 //如果没有声明 using namespace std; , 就必须使用域作用符号..., 下面介绍下访问类成员变量 ; 2.定义类中的成员变量 : 该变量定义在类中 ; //类的成员变量 int a_int = 888; 3.在方法中定义一个同名的成员变量 : 注意类中的成员变量与方法中的局部变量赋值不同...包 , // 上面的 cout endl string 等都定义在 std 命名空间中 // 如果没有 using namespace std; 声明命名空间 , // 那么必须使用域作用符
,命名空间中的所有内容都局限于该命名空间中 2.2 命名空间使用 命名空间中成员该如何使用呢 比如: #include // 引入iostream以使用std::cout和...使用 using 关键字可以将命名空间中的某个成员引入当前作用域,之后可以直接使用该成员。...,之后可以直接使用命名空间中的所有成员。...使用 using 将命名空间中某个成员引入:适用于只需要频繁使用命名空间中的某几个成员的情况。...指针空值 nullptr 10.1 C++98 中的指针空值 在 C/C++ 中,如果一个指针没有合法的指向,我们通常会将其初始化为 NULL。
前言: 在前面我们已经学习了string的使用及其模拟实现,并且我们也已经学习了vector的使用,今天我们就来学习一下vector的模拟实现 一、 vector的基本成员变量 我们之前已经学习了...: #include using namespace std; //命名一个命名空间,在这个命名空间中实现我们自己的vector,这样能避免受库中vector的影响 namespace...,将其改成迭代器相关的,方便我们后面写类成员函数 改进后: #include using namespace std; //命名一个命名空间,在这个命名空间中实现我们自己的vector...//由于v中的参数是(int,int),所以编译器容易把它与迭代器相关的函数去配对 //所以对于上面这个函数我们又写了一个vector(int n, const T& m = T())类型的来避免错误发生...拷贝元素 // 这里不能直接使用memcpy,原因我们将放到下面专门讲 //if (_start) // memcpy(tmp, _start, sizeof(T)*size); if
vector 空间增长问题 容量空间 接口说明 size 获取数据个数 capacity 获取容量大小 empty 判断是否为空 resize(重点) 改变vector的size reserve (重点...resize在开空间的同时还会进行初始化,影响size。 size获取数据的个数 我们可以看到有5个数据,获取的也是5。 ...capacity获取容量大小 capacity的代码在vs和g++下分别运行会发现,vs下capacity是按1.5倍增长的,g++是按2 倍增长的。...(注意这个是算法模块实现,不是vector的成员接口) insert 在position之前插入val erase 删除position位置的数据 swap 交换两个vector的数据空间 operator...是内存的二进制格式拷贝,将一段内存空间中内容原封不动的拷贝到另外一段内存 空间中 2.
(4)下面的打包环境:Xcode 7.3.1、iOS 9.3.2。...(12)点击Devices,告诉苹果哪一台设备可以进行真机调试 (13)点击右上角的加号: (14)在Xcode中,点击window->Devices,获取设备的UDID (15)填写设备的描述和设备的... 普通的开发者账号,一个账号只能注册100台设备,苹果并没有提供删除设备ID的功能,仅仅只能禁止某台设备调试(禁用后,名额仍然会被占用),被禁止的设备会在下一次付费时被清空(第二年),从而释放名额...将(5)中得到的app文件,拷贝到一个新建文件夹中,该文件夹命名为“Payload“,然后右键选择“压缩Payload“,如下图: 我们将得到一个Payload.zip文件,将该文件重命名为Payload.ipa...(有时也直接命名为AdHoc)重命名后,如下: 选择 TARGETS->Build Setting->Code Signing,如下: 找到 Code Signing Identity
成员变量与迭代器 我们还是需要在一个命名空间里模拟实现vector,防止和标准库里的起冲突。...3.memcpy浅拷贝问题 memcpy(tmp, _start, size() * sizeof(T)); memcpy是浅拷贝,如果vector存的是内置类型,那么浅拷贝就没有问题,如果存的是自定义类型...无参构造 无参构造其实我们并不需要写,因为已经在成员变声明时给了缺省值,编译器自动生成的无参构造函数走初始化列表满足需求了。但是由于我们写了其他构造函数,编译器就不自动生成了。...void pop_back() { //判断下数组是否为空 assert(!empty()); --_finish; } insert 在pos位置插入一个元素。...typename vector::const_iterator it = v.begin(); //typename标定为类型 //从没有实例化的类模板取出来的可能是类型或者成员变量
一.环境说明 搭建机器:一台Mac Book Pro 开发工具:XCode V7.3.1 开发环境:OS X EI Capitan 版本 10.11.5 jenkins版:V1.647 (特别注意...Paste_Image.png 会报下面的错误 ? Paste_Image.png 为什么会这样呢?我暂时也没搞明白,如果有大神知道的可以留言告知,感谢不尽!...查看目录.png 在jenkins的workspace目录中,可以看到构建的项目 ?...Paste_Image.png 3:编译配置(很关键) 上面虽然编译成功了,但是你发现根本没有看到ipa文件,所以还需要进行下面的配置:增加构建步骤 这就用到我们上面安装的Xcode插件了 ?...=@ipa所在路径" -F "uKey=用户User Key" -F "_api_key=用户API Key" http://www.pgyer.com/apiv1/app/upload 小技巧:快速获取
'; } //非限定访问:用于访问当前空间中的成员,位于哪个命名空间下就访问哪个 showinfo(); //限定访问:只能访问当前所在空间的子空间中的成员 BB\showinfo();...> 7.4命名空间和动态语言特征 动态访问命名空间的元素,PS:因为在动态的类名称、函数名称或常量名称中,限定名称和完全限定名称没有区别,因此其前导的反斜杠是不必要的。 test.php 命名空间名称的字符串。在全局的,不包括在任何命名空间中的代码,它包含一个空的字符串。...在命名空间内部,所有的没有根据导入规则转换的限定名称均会在其前面加上当前的命名空间名称。...成员变量 − 定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可称为对象的属性。 成员函数 − 定义在类的内部,可用于访问对象的数据。
UIKeyboardFrameEndUserInfoKey获取键盘的frame,再动态调整输入框的位置。...问题定位: Crash日志里面的信息无法符号化,原因就是还原Crash信息的符号表里没有静态库的信息。 我们知道,静态库是只有编译,没有链接的过程。 在实际打到二进制包的时候,才会进行链接操作。...正确设置 附: Xcode相关设置的文档,直接点击这里的链接。如果失效,可以按照下面的步骤查找: ?...通过crash的描述platform_memmove,还有堆栈信息我们可以定位到代码异常是出现在memcpy的函数。 通过错误类型,我们知道是访问非法内存地址。...memcpy一共有三个参数,在执行函数的时候会把三个参数push进x0、x1、x2三个寄存器。
图片(image view)的获取方式(从硬盘或者摄像头) 7. 窗口(window)的尺寸控制 实践开始: 创建一个Mac工程其实与iOS工程非常相似,都使用Xcode,只是选择的工程模版不同?...选择模版没有出错并且它能正常工作 2. 一个好的编译开端:尽管这是一个空窗口项目 3....文件中,导入MasterViewController,并创建成员属性 ?...这时我们最好编译运行一下项目工程,以确保我们做的这些操作都没什么问题,虽然窗口里table View仍然是空的,这是因为我们并没有把数据模型和UI连接在一起。...AppDelegate.m文件 运行程序,确保上面我们做的设置没有错误。为了能够显示需要的Bug 列表,我们要让table view 从模型中获取数据。
但不正确的集成姿势,或者某些错误的配置,常常会导致推送无法正常使用。 比如, 1.Xcode开发环境中关于推送的配置不正确 2.推送证书设置错误或者是证书过期失效 那么,集成推送需要注意些什么?...Xcode版本中,文件内容是不同的,具体看下图 可以发现: 在使用Xcode7.3.1版本进行打包开启了远程推送的工程的时候,工程中并不会自动创建Target-entitlements文件,进而archived-expanded-entitlements.xcent...在iOS 10.3.1的设备上,从操作同iOS9的一致,后台显示没有绑定到device token。反复下载重试,结果一样。...: 某游戏App在打包的时候,生成的包关于推送的配置存在问题 引入原因: Unity里面放了一份entitlements文件,导出到XCode的时候没有被识别到,所以每次XCode都生成一个新的entitlements...device-token 未获取到,或者是获取到了device token,但是发送给XG服务器的姿势不正确 用户设备关闭了消息推送,或者是设备的网络连接有问题 Apple或者是XG服务器不稳定 再延伸
1.2.3 vector的空间增长问题 同样,与string中的函数功能和名字相同: 容量空间 接口说明 size 获取数据个数 capacity 获取容量大小 empty 判断是否为空 resize(...然而事与愿违,并没有成功打印反而运行错误,因此我们可以断定,v1并没有像我们想的那样去调用第三种函数,我们通过观察上面的错误信息,发现,其调用的是迭代器初始化,即构造函数现代写法中的vector(InputIterator...capacity 获取容量大小 empty 判断是否为空 resize(重点) 改变vector的size reserve (重点) 改变vector的capacity 通过前面的文档,我们也能够了解到这些成员函数的参数个数和种类...因此我们同样也需要注意: 在C++中要避免使用C语言中的函数:memcpy、realloc、malloc等(realloc原地扩还好,若是异地扩容,就会发生我们所提到的错误) 3.2 vector 事实上,string与vector的道理是相同的,如果我们仍然用memcpy,会发现在需要扩容的过程中仍然出现浅拷贝造成的错误: 1.
领取专属 10元无门槛券
手把手带您无忧上云