自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(220)
  • 收藏
  • 关注

原创 [iOS]modalPresentationStyle和modalTransitionStyle

首先说一下modalPresentationStyle。当你用present的方式呈现一个viewController的时候,可以设置将要弹出的viewcontroller的展示样式,对于iPhone和iTouch来说,一般主要就是三种。先看一下所有的。typedef NS_ENUM(NSInteger, UIModalPresentationStyle) { UIMo

2017-01-24 12:16:57 5758

原创 [iOS]UIFont的lineHeight与pointSize

写这篇文章的初衷是由于我有一次想获取一个font的字体大小时使用了UIFont的lineHeight属性,结果是比字体的大小要大了一部分,然后经过查阅各种资料,发现了原因。首先我们来看一看UIFont的API里面有哪些属性:// Font attributes@property(nonatomic,readonly,strong) NSString *familyName;@prope

2016-10-23 21:27:53 12958 2

原创 [iOS]iOS结合OpenCV做视频流处理或人脸识别

下面是做好的demo的样子。然后我来讲一下怎么实现的。首先去http://opencv.org/downloads.html下载OpenCV for iOS我下载的是3.1版本。链接点进去没反应的自行翻墙一下。然后将里面的framework直接拖入到iOS工程中。界面什么的随便搭一下。头文件引入#import #

2016-09-26 20:51:05 4390

原创 多项式计算器-中缀变后缀并求值-C++版

闲着没事写了一个计算器回忆一下,支持加减乘除,括号,10以上的运算和负数。不过没做错误判定,你的式子要是对的才行。。。-19+(-3-(-11))*13+4/2我的例子因为最近用STL比较多,为了写起来方便,所以多了很多类型转换的地方,会影响一些效率,但是这个还是以实现功能为主吧。class Solution {public: int calcul

2016-09-17 20:22:38 681

原创 [iOS]SDWebImage 源码阅读(三)下载

下载部分从这里开始 SDWebImageDownloaderOptions downloaderOptions = 0; if (options & SDWebImageLowPriority) downloaderOptions |= SDWebImageDownloaderLowPriority; if (opt

2016-09-14 18:06:59 794

原创 [iOS]SDWebImage 源码阅读(二)缓存

缓存部分从这部分开始 operation.cacheOperation = [self.imageCache queryDiskCacheForKey:key done:^(UIImage *image, SDImageCacheType cacheType) {我们进到里面看看SDWebImage的缓存是怎么做的。 if (!doneBlock) { re

2016-09-12 21:14:31 445

原创 [iOS]SDWebImage 源码阅读(一)

这是我看的第四份比较著名的源码了,看了不只一遍,因为里面蕴含的知识太多了,而且刚开始也有一些地方不懂,不过经过不断的查资料等等终于是差不多理解了,下面就把我看的地方记录下来,希望能对正在看这份代码的人有所帮助,我会尽量的每一处地方都讲到。老规矩,按照一次代码调用的全程来分析。首先看最常用的方法/** * Set the imageView `image` with an `url`.

2016-09-12 19:43:16 486 8

原创 [iOS]__attribute__

今天看博客看到了sunnyxx大神介绍了关于attribute的一个黑魔法,并且我在ibirme大神的源代码里面也看到他用过这个属性,我就系统的学习了一下,记录一下常用的方法。__attribute__((format()))  这个format有3个参数。int my(NSString *str,NSString *str1,NSArray*str2,...) __attri

2016-09-07 19:41:45 1284

原创 [iOS]NSOperation的start与main,并发与非并发。

NSOperation有一个属性,isConcurrent.Operation queues usually provide the threads used to run their operations. In OS X v10.6 and later, operation queues use the libdispatch library (also known as Grand Ce

2016-08-23 20:40:57 5082

原创 [iOS]一个动态方法解析的小demo

+ (BOOL)resolveInstanceMethod:(SEL)sel{ NSString *str = NSStringFromSelector(sel); if ([str isEqualToString:@"haha"]) { class_addMethod(self, sel, (IMP)test, "v@:"); return YES

2016-07-13 15:36:36 553

原创 [iOS]MJExtension 源码阅读

最近这几天看了MJExtension的源码,虽然不是每一行代码都读了,但是核心功能部分的代码都看了一遍,大致知道了实现原理,并且学习到了一些新的知识。在这里做一下记录。首先根据代码从头到尾的运行解释一下。只做iOS的同学可能不知道程序是在哪里执行的,并没有写在ViewController和AppDelegate里面,而是写在了main文件里面,并且用的是C函数。

2016-06-07 16:06:48 2612

原创 [iOS] 在循环中使用setNeedsDisplay来调用drawRect的方法

今天想做一个根据进度变化的动画,因此写了一个循环做实验。大致的结构就是在一个循环内不断更新一个变量并且更新动画。但是发现每次都是循环结束的时候动画才执行,即只执行了最后一次。然后去google,发现了这样一段话。When a content of the view is changed and needs to be redrawn you can invalidate the

2016-03-15 20:19:35 1571 1

原创 [iOS]iOS在分类中声明属性的方法(不提倡使用)以及关联对象介绍

今天只是想看看能不能在分类中声明属性,发现果然可以,不过最好还是不要使用。首先在一个分类里声明一个属性,执行。没有问题然后其它类中引入这个分类,访问我生命的这个属性。报错了没有set方法,我们在.m文件中也可以看到警告原因是没有合成存取方法。下面我们实现以下合成存取方法。发现根本就没有_str,当然不能用self.st

2015-12-25 20:32:20 1377

原创 [iOS]关于__unsafe_unretained与__weak

ios5之前用__unsafe_unretained之后用__weak现在应该都用__weak了,__unsafe_unretained会造成野指针的问题,因为当他所指向的对象引用计数为0的时候,他不会变为nil。

2015-12-17 16:59:18 478

原创 IOS使用XMPP最新教程(六)发送和接收消息

这一篇应该是这个系列的最后一篇了,基本已经涵盖了开发所需要的大部分功能,想要其余的功能可以看xmppFramework的文档。发送消息:- (IBAction)sendButton:(id)sender {        NSString *message = self.textField.text;        if (message

2015-10-12 15:48:50 2244

原创 IOS使用XMPP最新教程(五)添加好友和接受好友请求

加好友要使用Roster类,整个加好友的过程比较简单,就是下面的代码。XMPPRoster * xmppRoster = [self xmppRoster];    [xmppRoster subscribePresenceToUser:jid];注意jid是这样生成的:XMPPJID *jid = [XMPPJID jidWithS

2015-10-12 12:49:57 1338

原创 IOS使用XMPP最新教程(四)获取好友列表 (通过花名册)

这是真正用来获取好友列表的方法,网上也有,不过网上没有找到花名册初始化的方法,这个也是坑啊!!!首先在setupStream方法里面xmppRosterCoreDataStorage = [[XMPPRosterCoreDataStorage alloc]init];        xmppRoster = [[XMPPRoster alloc] initWithRos

2015-10-07 14:12:20 2668

原创 IOS使用XMPP最新教程(三)获取好友列表 (通过获取好友状态)

就是下面这个函数- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence{}目前网上的demo都是用这个函数来获取好友列表的,但是此方法并不是用来获取好友列表的,他只能拿到线上好友的信息,如果这个好友没上线,你就无法取得这个好友的信息,一旦这个好友上线了,你就能取到,如

2015-10-04 17:11:38 1985

原创 IOS使用XMPP最新教程(二)登陆实现

因为要写成一个系列,不想每次写太多,这次就简单的实现一个登陆的功能。//是否连接-(BOOL)connect;//终止连接- (void)disconnect//设置xmppStream-(void)setupStream;//上线-(void)goOnline;//下线-(void)goO

2015-09-24 21:40:46 890 2

原创 [iOS]XMPP didReceivePresenceSubscriptionRequest函数不执行解决办法

这是收到其他人对你加好友请求接收的方法。今天写了这个方法之后死活不掉用。不过现在已经解决了。我看了Roster.m的源码,发现调用这个函数的函数叫didReceivePresence是不是很熟悉!!!!!没有错,这个函数就是我们在接收好友状态的时候的那个回调函数,一般用来判断哪些好友在线之类的。这个函数已经被我们自己重写了,所以Roster里

2015-09-24 21:24:41 1283

原创 IOS使用XMPP最新教程(一)openfire安装+XMPP框架搭建

最近要开发一个项目,需要IM(即时通讯功能),而大家普遍使用的都是XMPP框架,经过几天的学习,终于把它搭建好了,做了一个demo。我在网上看了很多例子,基本都已经过时了,搭建不成功,经过不断的探索,才得以成功,我想把我的经验写下来,以免大家重蹈覆辙,浪费大量的时间在这上面。首先是openfire安装,这个一般没什么问题,按照网上的教程就可以。我主要说一下XMPP框架的搭建http

2015-09-20 16:05:16 1800 2

原创 leetcode 654 Maximum Binary Tree C++

这个题第一想法就是递归,然后就写下了下面的代码。分成两部分,然后分别对两部分递归。 TreeNode* util(vector& nums, int left, int right) { if (left > right) return NULL; int max = INT_MIN; int index = right;

2017-08-19 22:44:51 579

原创 leetcode 520 Detect Capital C++

这道题我用了从后往前的思路。如果当前是小写的,上一个是大写的,直接false,否则continue如果当前是大写的,上一个是大写的,continue,否则看当前是不是首尾,不是返回false。6ms,打败70%+ if (word.empty()) { return false; } bool isCapital

2017-08-19 20:33:12 620

原创 leetcode 551 Student Attendance Record I C++

这种题不想说什么,注意审题就好了。 bool checkRecord(string s) { int size = s.size(); int L = 0; int A = 0; for (int i = 0 ; i < size ; ++i) { if (s[i] == 'A') {

2017-05-06 16:15:38 534

原创 leetcode 64 Next Greater Element I C++

遍历第二个数组,用一个栈来构建一个数字和next greater一一对应的map即可。 vector nextGreaterElement(vector& findNums, vector& nums) { stack st; unordered_map mp; vector vec; for (int i : nums)

2017-04-16 00:11:44 361

原创 leetcode 55 Jump Game C++

这道题从前往后便利,记录能到达的最大Index,如果发现当前index大于最大index,则不可达。然后判断是否大于了最大index即可。 bool canJump(vector& nums) { int len = nums.size(); int maxIndex = 0; if (maxIndex >= len - 1) retu

2017-04-14 11:22:58 558

原创 leetcode 64 Minimum Path Sum C++

动态规划状态转移方程 dp[i][j] += min(dp[i-1][j],dp[i][j-1])一次AC,代码如下: int minPathSum(vector>& grid) { int row = grid.size(); int col = grid[0].size(); for (int i = 1;i<row;i++)

2017-04-14 10:49:39 553

原创 leetcode 82 Remove Duplicates from Sorted List II C++

这道题题意很简单,但是容易出错,特别是第一个Node需要删掉的情况,所以可以使用一个dumyNode来做,简单而且不容易出错。 ListNode* deleteDuplicates(ListNode* head) { if (!head || !head->next) return head; ListNode *dummy = new ListNode(

2017-04-13 15:00:39 528 1

原创 leetcode 208 Implement Trie C++

这个就是字典树了,我用unordered_map时间上更节省一些。class TrieNode { public: unordered_map children; bool isLeaf; TrieNode(){isLeaf = false;};};class Trie {public: TrieNode *root; /** Initia

2017-04-13 00:30:57 623

原创 leetcode 230 Kth Smallest Element in a BST C++

先用简单的方法,中序遍历放到一个数组里面,取k-1即可。 vector vec; void inorder(TreeNode *root) { if (!root) return; inorder(root->left); vec.push_back(root->val); inorder(root->right);

2017-04-13 00:14:12 584

原创 leetcode 538 Convert BST to Greater Tree C++

用反过来的中序遍历即可 int sum = 0; void rever(TreeNode *root) { if (!root) return; rever(root->right); root->val += sum; sum = root->val; rever(root->left);

2017-04-12 23:54:00 516

原创 leetcode 515 Find Largest Value in Each Tree Row C++

层次遍历,太简单了,一次过。 vector largestValues(TreeNode* root) { queue que; vector vec; if (!root) return vec; que.push(root); while(!que.empty()) { int s

2017-04-12 23:41:25 453

原创 leetcode 513 Find Bottom Left Tree Value C++

一次AC,用的层次遍历,遍历一层的时候记录第一个node int findBottomLeftValue(TreeNode* root) { queueque; que.push(root); TreeNode *leftNode = NULL; int horizinal = 1; int tmpHoriz

2017-04-10 00:27:05 466

原创 leetcode 557 Reverse Words in a String III C++

把word分割出来分别旋转即可。 void reverseString(string &s,int left, int right) { while (left < right) { char tmp = s[left]; s[left] = s[right]; s[right] = tmp;

2017-04-10 00:04:34 473

原创 字典树Demo C++

字典树是一种处理字符串很重要的树,我写了一个Demo,不会写的同学可以参考看看。头文件自己加吧 :)class TreeNode {public: int val; unordered_map children;};class Tree {public: TreeNode *root; Tree() { root = new Tre

2017-04-09 14:48:42 453

原创 leetcode 508 Most Frequent Subtree Sum C++

这道题我用后序遍历把所有子树和都放在一个map里面保存,然后找到最大的次数并输出即可。 map m; int houxu(TreeNode *root) { if (!root) return 0; int sum = root -> val; sum += houxu(root->left); sum += hou

2017-04-08 23:44:00 285

原创 leetcode 328 Odd Even Linked List C++

这道题把奇数的拿出来,再把偶数的拿出来,连接上即可。 ListNode* oddEvenList(ListNode* head) { if (!head) return head; ListNode *odd = head; ListNode *even = head -> next; ListNode *

2017-04-07 18:38:44 572

原创 leetcode 495 Teemo Attacking C++

这题就是两次攻击间隔小于duration的话就加间隔,否则加duration。注意最后一次和没有的情况即可。 int findPoisonedDuration(vector& timeSeries, int duration) { if (timeSeries.empty()) return 0; int sum = 0; for (i

2017-04-07 16:50:27 417

原创 leetcode 485 Max Consecutive Ones C++

这个太简单,不说了int findMaxConsecutiveOnes(vector& nums) { int subNum = 0; int max = 0; for (int i = 0;i<nums.size();i++) { if (nums[i] & 0x01) subNum++; els

2017-04-07 16:39:28 538

原创 leetcode 334 Increasing Triplet Subsequence C++

只要找到第三个数比前两个数大就行了,记录更小的数字。 bool increasingTriplet(vector& nums) { int a = INT_MAX, b = INT_MAX; for (auto num : nums) { if (num <= a) { a = num;

2017-03-25 16:57:20 591

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除