- 博客(64)
- 资源 (26)
- 收藏
- 关注
原创 Xcode8 环境变量设置 避免打出一堆信息
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project\ Templates/iOS/Application/Cocoa\ Touch\ Application\ Base.xctemplate/TemplateInfo.plis
2016-10-19 21:00:28 958
原创 多线程下单例模式的安全性
在iOS 中,一般情况下会提供一个单例,供整个App中调用,通用名称为 [类名 sharedXXX].在多线程的情况下,要保证线程安全或者数据安全,需要加入dispatch_once.static id _instance;+ (instancetype) sharedPerson{ static dispatch_once_t onceToken; di
2016-10-10 21:47:02 917
原创 UIAlertController的使用
一、创建一个UIAlertControllerUIAlertController *controller = [UIAlertController alertControllerWithTitle:@"用户名或密码错误!" message:@"请多次尝试!" preferredStyle:UIAlertControllerStyleAlert];二、创建一个或多个UIAlertAction
2016-09-11 18:51:32 627
原创 UICollectionView使用笔记
一、与UITableView的相同点与不同点1、相同点1)都是显示集合数据2)都有单元格重用机制,在使用之前都要注册cell(原型cell除外)3)都需要三个数据源代理方法(组数、行数(item数)、每一个单元格)2、不同点:1)UICollectionView不知道如何布局单元格,在实例一个UICollectionView的时候,要传入布局信息。详细见布局对象的介绍。
2016-08-29 20:36:47 1668
原创 KVC的使用
一、概念1、KVC:Key-Value-Coding,对一个对象的属性,以键、值的方式,赋值 或 取值 的一套方法2、KVC-是一些列分类方法,属于NSObject(凡是NSObject对象或者是子类,都具有KVC的方法)@interface NSObject(NSKeyValueCoding)二、KVC 方法的使用 1. setValue:forKey / s
2016-08-29 20:30:45 2070
原创 UITableView的使用
1、UITableView继承自UIScrollView2、UITableView是显示表格数据的UI控件:只能显示单列多行数据3、UITableView需要设置数据源代理,才能知道显示什么数据。设置数据源代理的方法:遵守代理协议UITableViewDataSource,设置代理:tableView.dataSource = self;实现三个代理方法://组数-
2016-08-29 20:22:48 490
原创 UIPageControl的使用
一、常用的属性:@property(nonatomic) NSInteger numberOfPages;//默认是0 @property(nonatomic) NSInteger currentPage; //默认是0,[0 - numberOfPages -1]@property(nonatomic) BOOL hidesForSinglePage;//只有一页时是否隐藏控制器,默认不
2016-08-29 20:17:44 869
原创 UIScrollView原理、属性、代理方法及有关功能实现(用纯代码方式)
一、UIScrollView实现原理滚动原理:通过修改scrollview的bounds.origin。可以通过以下代码验证- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ NSLog(@“frame:%@ *** bounds:%@ *** “,NSStringFromCGRect(self.scrollView.
2016-08-22 01:42:19 1492
原创 自动布局:AutoLayout代码实现:NSLayoutConstraint、VFL、Mansony
一、注意事项1、使用AutoLayout自动布局,全程都不要出现和frame相关的代码了。2、设置 AutoLayout 约束,之前先禁用AutoResizing ,在代码里只需要针对某一个视图决定是使用 AutoResizing 还是 使用 AutoLayout。 // “不把AutoResizing设置翻译成AutoLayout约束” redView.transl
2016-08-22 00:57:38 2338
原创 自动布局:AutoLayout注意事项及autolayout动画
一、相关注意事项1. 使用范围:AutoLayout 定义一个视图和另一个视图之间的位置关系,这两个视图可以完全没有关系。2. AutoLayout自动布局作用原理:自动布局的核心就是约束。约束是一个规则,最后还是根据约束计算frame,然后把自动计算的frame设置给控件。3. 自动布局核心思想:通过设置约束,可以让系统自动计算Frame。
2016-08-21 21:22:54 1361
原创 自动布局:AutoResizing
一、自动布局推出时间1,2007.1.9 iPhone ~ 2011.10.4 iPhone 4s时期,只有一种屏幕不需要自动布局技术。2,2010.1.27 iPad ,iPad出现以后需要进行横竖屏切换,这时候出现AutoResizing。3,2012.9 iPhone 5。iOS6发布同时发布iPhone5,推出 AutoLayout 技术。4,2014.9.10 i
2016-08-21 20:38:45 575
原创 MVC架构模式与xib
MVC架构模式M:Model,模型,保存数据V:View,视图,显示控件及数据C:Controller,控制器,传递数据,管理视图Xib1).xib文件是一种自定义视图。2)创建方法:File—New—File,选择iOS—User Interface—View/Empty。3)好处:可以先设计好自定的视图,然后调用4)编译运行后,在
2016-08-21 19:53:02 817
原创 动画创建及transfrom属性
OC语言中,动画创建有两种方法1)头尾式动画,非常少用,了解即可。例如: /*动画的第一种实现方法:头尾式动画*/ // 开始动画 [UIView beginAnimations:nil context:nil]; // 设置动画时间 [UIView setAnimationDuration:2]; // ---------
2016-08-17 01:21:26 1777
原创 纯代码搭建界面及相关注意点
纯代码搭建UI界面主要步骤:1、系统初始化时视图控制器已经创建了根视图,即self.view2、创建需要添加到UI界面上的控件3、设置控件的背景颜色、文字及字体颜色、控件样式等等各种属性4、设置控件的frame5、将控件添加到根视图(self.view addSubView)例如:纯代码搭建小飞机游戏中:1)首先加载背景图//设置背景图- (void)setupB
2016-08-16 00:44:31 837
原创 不能继承的类
题目:用C++设计一个不能被继承的类思路是将类中的构造函数与析构函数声明为私有的,代码如下:#include using namespace std;class MyFinal{public: static MyFinal* getInstance() { cout<<"Get the Instance"<<endl; return new MyFi
2012-11-20 10:27:08 515
原创 C++继承、虚函数、纯虚函数、多态、覆盖、重载、隐藏、引用等常用概念
常用概念有:继承、虚函数、纯虚函数、多态、覆盖、重载、隐藏等1、继承: 继承比较好理解,主要注意继承中构造函数的调用顺序。构造子类(派生类)的时候,先要调用父类(基类)的构造函数。2、虚函数: virtual关键字3、纯虚函数 virtual void breath() = 0; 纯虚函数让基类先具有一个操作名称,
2012-11-19 16:32:08 1819
转载 数形结合彻底解决2个球100层楼摔坏的问题 .
题目:有一栋100层高楼,从某一层开始扔下的玻璃球刚好摔坏,现有两个玻璃球,试用最简便的方法确定这个恰好摔坏玻璃球的那层. 这是一道著名的面试题目,仅写出我的思路和解法. 首先从题目得出基本思路1.第一个球应该低到高试,但不是每层必试.2.不能有侥幸心理,第二个球在第一个球的区间里每层必试. 上图是简化为10层楼解法。 数字代表楼层,球从原点先右后上的路
2012-11-03 15:23:36 3552
原创 关于二叉树的一些操作
二叉树的结构定义为:struct BinTree{ int data; BinTree* lchild; BinTree* rchild;};树深度的递归算法://求树深度的递归算法,根深度为1int Depth(BinTree T){ int m,n; if(!T) return 0; else { m=Depth(T->l
2012-10-21 16:40:26 613
原创 SQL语句用法小结
一、基本结构1、select字句如果显式删除重复的记录,可以使用如下:select distinct branch_namefrom loan如果显式指明不删除重复(默认时就是不删除):select all branch_namefrom loanselect字句可以带加减乘除运算符号:select branch_name, loan_number, a
2012-10-17 21:03:55 3271
转载 strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更
2012-10-16 16:36:39 627
原创 字符串匹配算法总结
一、最简单的BF算法从文本T的第一个字母和模式P的第一个字母匹配,如果不匹配,则从T的第二个字母开始匹配。int BF(char *str, char *ch){ int len1 = strlen(str); int len2 = strlen(ch); int i=0,j=0; while (i < len1 && j < len2){ if (str[i]
2012-10-16 10:06:29 672
原创 网易、雅虎、小米、人人、微策略、纳拓笔试题(回忆版)
网易互联网笔试1、计算斐波那契数列的值,要求复杂度小于O(n^2)2、位运算计算两个数的和3、图的深度优先搜索(非递归算法)4、检测CPU大小端int checkSystem(){ union check { int i; char ch; }c; c.i = 1; return c.ch == 1;} 5、有一个很大的文本文件,
2012-10-13 19:54:02 4601
原创 斐波那契数列算法分析
背景:假定你有一雄一雌一对刚出生的兔子,它们在长到一个月大小时开始交配,在第二月结束时,雌兔子产下另一对兔子,过了一个月后它们也开始繁殖,如此这般持续下去。每只雌兔在开始繁殖时每月都产下一对兔子,假定没有兔子死亡,在一年后总共会有多少对兔子?在一月底,最初的一对兔子交配,但是还只有1对兔子;在二月底,雌兔产下一对兔子,共有2对兔子;在三月底,最老的雌兔产下第二对兔子,共有3对兔子;在四月底
2012-10-11 11:23:56 1110
原创 TopK算法
TopK算法就是寻找最大的K个数字。在上一篇文章《标准模板库STL中优先队列Priority Queues使用手册》的后面提到了使用优先队列解决,更多的解法是用最小堆解决。 参考文章:C语言版 topK 算法实现寻找最大的k个数,TopK问题的C++实现O(N)的时间寻找最大的K个数 TopK代码
2012-10-06 16:45:44 1213
原创 标准模板库STL中优先队列Priority Queues使用手册
优先队列容器默认使用向量容器实现,用户也可以使用双端队列容器。优先队列总是把优先级最高的元素放在队列的最前方,来保持队列的有序性。插入操作push()使用一个双变量的布尔函数,将队列中的元素重新排序,以满足这个要求。该函数可以由用户提供,否则可以使用如果元素越小,优先级越高,则需要使用函数对象greater,表明在决定向优先级队列中插入新元素时,push()应该使用的操作符是>而不是
2012-10-06 14:56:24 13829
原创 标准模板库STL中Queue参考手册
队列容器默认实现为双端队列容器,用户也可以指定使用链表容器来实现,但不能使用向量容器,否则会编译出错。这是因为队列容器里面的出队列pop()是通过调用pop_front()来实现的,pop_front()为底层容器的成员函数,但向量容器不包含这样的成员。#include queue q1; //默认为双端队列queue > q2; //链表 两个>之间要有空格构造:
2012-10-06 13:56:00 5349
原创 标准模板库STL中Stack参考手册
STL中的一般栈类实现为容器适配器:它使用一个容器,并让它按照指定的方式工作。栈容器不是重新创建的,它只是对已有容器做适当的调整,默认的情况下,双端队列(deque)是基础容器,但是用户可以用下面的声明选择链表或者向量stack stack1; //默认为双端队列stack > stack2; //向量 两个>之间要有空格stack > stack3; //链表构造函数:
2012-10-06 13:38:07 4428
原创 标准模板库STL中List使用参考手册
List 就是一双向链表,可高效地进行插入删除元素。包括构造、方法等。内存空间可以是不连续的,通过指针来进行数据的访问 优: 1)插入/删除效率高 缺: 1)不支持随机存取,查询效率较低 在使用list必须包括头文件#include 构造:list l1; //创建一个没有任何元素的listlist l2(10); //创建一个有10个元素的list,每个
2012-10-05 21:29:34 1521
原创 标准模板库STL中vector使用参考手册
简介: vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。 为了可以使用vector,必须在你的头文件中包含下面的代码: #include 注意:头文件没有“.h” vector属于std命名域的,因此需要通过命名限定,如下完成你的代码: using std:
2012-10-05 20:55:33 1979
原创 笔试面试常见问题问答
1、什么是线程安全? 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 线程安全问题都是由全局变量及静态变量引起的。 若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑
2012-10-05 16:20:00 664
转载 new和malloc的区别
1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void *malloc(unsigned int num_bytes); 说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。
2012-10-05 14:04:40 666
原创 sizeof与const关键字
C++中sizeof与const关键字会经常出错。一、sizeof在32位系统中下面各个sizeof的值是多少? int *p = NULL; sizeof(p)//值为4, 因为32位系统中的指针占4字节 sizeof(*p)//4, 因为此指针指向的是int类型 int a[100]; sizeof(a)//400, 数组大小 sizeof(a[100])/
2012-10-05 00:08:42 1930 1
原创 不使用库函数编写strlen函数
不使用库函数,甚至不使用变量来写出strlen函数,或者字符串的其他函数是笔试、面试等中经常会遇到的一个问题。下面贴出代码分享。#include #include #include int my_strlen1(const char *str)//递归{ return ('\0' != *str) ? (1+my_strlen1(++str)) : 0;}i
2012-10-04 20:11:21 3055 2
原创 死锁的产生、解除与预防
死锁是指两个或两个以上的进程在执行的过程中,因争夺资源而造成的一种互相等待的现象。 产生死锁的四个必要条件:1、互斥条件:一个资源每次只能被一个进程使用。2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(资源的部分分配)3、不剥夺条件:进程已经获得的资源,在未使用完之前,不能强行剥夺。4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
2012-10-03 19:13:19 663
原创 数据结构与算法——链表
对于单链表有很多考题。1、反转一个单链表,分别以迭代和递归的形式实现。链表结构如下:typedef struct node LinkNode;struct node{ int data; LinkNode *next;};迭代的实现形式:迭代实现的思路是:把一个带头节点的单链表讲头部后面的切断,讲后面的表的指针赋给一个临时指针。循环把该临时指针指向的变量插到头结点后
2012-09-17 21:28:19 405
原创 秒杀多线程面试题系列文章
文章转自MoreWindows的博客,再次特别注明。1.《秒杀多线程第一篇 多线程笔试面试题汇总》2.《秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别》3.《秒杀多线程第三篇 原子操作 Interlocked系列函数》4.《秒杀多线程第四篇 一个经典多线程同步问题》5.《秒杀多线程第
2012-09-15 19:57:15 896
原创 排序算法总结(4)——归并排序、基数排序
前三篇文章:排序算法总结(3)——交换排序排序算法总结(2)——选择排序排序算法总结(1)——插入排序四、归并排序归并排序和快速排序一样,是使用分治策略实现的排序算法,算法可以采用递归实现。所谓归并,就是将两个或两个以上的有序数据序列合并成一个新的有序数据序列。假设数组Array有N个元素,那么可以看成数组Array是由N个有序的子序列组成,每个子序列的
2012-09-13 22:41:10 887
原创 排序算法总结(3)——交换排序
上两篇文章,《排序算法总结(1)——插入排序》、《排序算法总结(2)——选择排序》。排序主要分为插入排序、选择排序、交换排序、归并排序、计数(也有叫分配)排序。现在总结一下交换排序下面开始第三部分:交换排序三、交换排序交换排序的基本思想是两两比较待排序对象的关键码,如果发生逆序(即排列顺序与期望的相反)就交换,直到所有对象都排序完毕。本节将介绍3种常见的交换排序算法,即冒泡排序
2012-09-11 22:49:27 670
原创 排序算法总结(2)——选择排序
接着上一篇文章《排序算法总结(1)——插入排序》的来。排序主要分为插入排序、选择排序、交换排序、归并排序、计数(也有叫分配)排序。现在总结一下交换排序二、选择排序选择排序方案是一类常用的排序方案。其基本思想是在排序时每次选择最小或最大项,将其放入到适当位置上,依此类推。好比玩扑克牌时要将扑克从小到大排列,最常用的方法是在这套扑克牌中每次找出一张最大的牌,放入已选好的牌序列中,重
2012-09-11 15:13:22 670
原创 排序算法总结(1)——插入排序
排序算法的重要性对于学计算机的童鞋来说是不言而喻的,不管是找工作还是考研,那是笔试必考面试必问!偏偏排序算法多,很容易混淆记不住。我以前也做过总结, 总在写在纸上,过一两个月不看又忘光了,故在此写一篇总结,一是为自己留着,二是为其他有需要的人可以做参考。有错误或改进的地方欢迎留言。废话少说。本文主要总结各种数据结构参考资料上都能见到的常用算法。主要分为插入排序、交换排序、选择排序、
2012-09-06 22:45:25 801
visual c++课程设计案例精编
2010-01-12
汇编语言集成编译器 V1.2
2009-05-19
BP网络的算法及改进
2009-05-12
十天学会ASP.NET教程
2009-05-09
计算机组成原理课件——存储系统
2009-05-01
C语言课程设计--学生选修课程系统设计源程序和课程报告
2009-05-01
计算机病毒的入侵原理与防御艺术
2009-05-01
人工智能基础 机器人、语言识别、图像识别、自然语言处理和专家系统等
2009-05-01
注册表结构和修改内容完全讲解手册
2009-05-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人