根据label正文内容动态计算正文的宽或高

在iOS开发中,有很多地方用到了label的高度自适应,即根据label中text的内容、宽度(或高度)、以及字体等条件来动态计算label的高度(或宽度),实现代码如下

//根据传过来的文字内容,文字大小,和最大尺寸动态计算文字所占用的size
- (CGSize)labelAutoCalculateRectWith:(NSString*)text FontSize:(CGFloat)fontSize MaxSize:(CGSize)maxSize
{
    NSMutableParagraphStyle* paragraphStyle = [[NSMutableParagraphStyle alloc]init];
   paragraphStyle.lineBreakMode=NSLineBreakByWordWrapping;
    NSDictionary* attributes =@{NSFontAttributeName:[UIFont systemFontOfSize:fontSize],NSParagraphStyleAttributeName:paragraphStyle.copy};
    CGSize labelSize;

      //如果是IOS6.0
    if (![text respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]){
        labelSize = [text sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:maxSize lineBreakMode:NSLineBreakByWordWrapping];
    }
    //如果系统为iOS7.0
    else
  {
          // iOS7中用以下方法替代过时的iOS6中的sizeWithFont:constrainedToSize:lineBreakMode:方法
        labelSize = [text boundingRectWithSize: maxSize
                                       options: NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading|NSStringDrawingTruncatesLastVisibleLine
                                    attributes:attributes
                                       context:nil].size;
    }
    labelSize.height=ceil(labelSize.height);    
    labelSize.width=ceil(labelSize.width);
    return labelSize;
}

uitextview 在中文后输入英文到行尾的时候,中文后的英文全部换到下一行

uitextview在中文后输入英文到行尾的时候,中文后的英文全部换到下一行,如下图所示:

Mou icon

会出现自动换行的问题,当然我们正常输入的时候是不希望看到这种情况的,所以,要去掉这种情况,我们只需在textView的代理方法- (void)textViewDidChange:(UITextView *)textView;中实现如下代码即可

- (void)textViewDidChange:(UITextView *)textView {
        //防止输入时在中文后输入英文过长直接中文和英文换行
        NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping;
        NSDictionary *attributes = @{    
                                     NSFontAttributeName:[UIFont systemFontOfSize:14],
                                     NSParagraphStyleAttributeName:paragraphStyle
                                     };
        textView.attributedText = [[NSAttributedString alloc] initWithString:textView.text attributes:attributes];
}

这样处理后就会看到效果如下图所示:

Mou icon

如何更好的限制一个UITextField/UITextView的输入字数

要限制一个UITextField/UITextView的输入字数,首先想到的应该是通过UITextFieldDelegate/UITextViewDelegate
的代理方法来限制,那么如何来更好的限制输入字数呢,下面我们来看看:

TextView。幸运的是,当我们点进去UITextView.h头文件里时,会发现- (void)textViewDidChange:(UITextView *)textView;这个代理方法,我们只需要在这个方法里实现字数限制就好

- (void)textViewDidChange:(UITextField *)textView
{
    if (textView == self.textView) {
        if (textView.text.length > 20) {
            textView.text = [textView.text substringToIndex:20];
        }
    }
}

TextField。Textfield就没有那么幸运了,当我们点进去UITextField.h头文件的时候,怎么也找不到- (void)textFieldDidChange:(UITextField *)textField方法,就在我们寻觅上述回调方法而不得时,可能会发现最下面有这么个消息通知名称:

UIKIT_EXTERN NSString *const UITextFieldTextDidChangeNotification;

不过,监听消息还要记得解除监听,通常我还习惯把监听消息的代码统一放在一个方法中,看起来有点“大动干戈”。
所幸的是UITextField本身提供了相应的事件监听:

[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

这样就可以更好地限制输入长度:

- (void)textFieldDidChange:(UITextField *)textField
{
    if (textField == self.titleField) {
        if (textField.text.length > 20) {
            textField.text = [textField.text substringToIndex:20];
        }
    }
}

这样两种方法好的原因,可以看一下详细介绍 http://blog.csdn.net/jasonblog/article/details/23771117

报错:process Launch Failed:failed to Get the Task for Process 1298(解决方案)

今天真机调试的时候出现了这个错误,如下图

Mou icon

这一次碰到的问题是这样的:模拟器上运行正常。我在iPhone 6上运行,程序编译正常,但是跑起来之后,大概一两秒的时间,就闪退(代码是没有问题的)。这个时候,Xcode7.1弹出这样的提示:

Could not launch “iOSStrongDemo”
process launch failed: failed to get the task for process 1298

错误分析:

是因为我之前打包的时候,修改了Provisioning Profile。我看了一下Build Settings里的Code Signing配置,发现Provisioning Profile选择的是XC Ad Hoc: *。如下图所示:

Mou icon

Ad Hoc是用来实现发布前的用户测试的,也就是通过Ad Hoc将未发布的App给其他人提前使用。显然这是不对的,我们是要真机调试。

解决方案:

解决方法很简单,将Provisioning Profile换成用开发证书创建的Provisioning Profile即可。

纯命令行教你Cocoapods的安装和使用

关于cocoapods的介绍和作用,网上有很多大神介绍的比我清楚,建议去看一下唐巧的http://blog.devtang.com/blog/2014/05/25/use-cocoapod-to-manage-ios-lib-dependency/http://www.360doc.com/content/14/0309/10/11029609_358970353.shtml
我就不多说了,这里直接上方法。

一、安装 CocoaPods

  1. 安装方式灰常简单,Mac下都自带ruby,使用ruby的gem命令即可下载安装:

    $ sudo gem install cocoapods
    $ pod setup
    
    注意:如果你的gem太老,这里会有问题,不过不用怕,可以尝试如下命令升级gem:
    
    $ sudo gem update --system
    
  2. 对了,ruby的软件源https://rubygems.org使用的是亚马逊的云服务,被墙了,你懂的!更新一下ruby的源就行了,用如下代码将官方的 ruby 源替换成国内淘宝的源:

    $ gem sources --remove https://rubygems.org/
    $ gem sources -a http://ruby.taobao.org/
    
    查看ruby源
    $ gem sources -l
    
  3. 还有一点需要注意,pod setup在执行时,会输出Setting up CocoaPods master repo,但是会等待比较久的时间。这步其实是 Cocoapods 在将它的信息下载到 ~/.cocoapods目录下,如果你等太久,可以试着 cd 到那个目录,用du -sh *来查看下载进度。

二、使用 CocoaPods

  1. 创建一个新的Project,cd到你创建的项目文件夹中,使用如下命令新建一个名为Podfile的文件;

    touch Podfile
    
  2. 这里可以利用vim打开Podfile文件;

    vim Podfile
    

    ps:如果不熟悉Vim编辑器,可以去看一下我的一篇关于Vim介绍的博客 http://jinqianchina.github.io/2015/04/20/vim-%E7%BC%96%E8%BE%91%E5%99%A8%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/

  3. 将依赖的库名字依次列在文件中即可;

    platform :ios
    pod 'SDWebImage'
    pod 'AFNetworking'
    pod 'Reachability',  '~> 3.0.0'
    
    注意:~>后面的是版本号,不加版本号的,,默认是最新版本
    
  4. 然后你将编辑好的Podfile保存退出 :wq。然后执行如下命令即可;

    pod install
    
  5. 到此,你的所有第三方库都已经下载完成并且设置好了编译参数和依赖(cocoapods自动完成),你只需要记住如下 2 点即可:

    1. 使用 CocoaPods 生成的 .xcworkspace 文件来打开工程,而不是以前的 .xcodeproj 文件。
    2. 每次更改了 Podfile 文件,你需要重新执行一次pod update命令。
    

JSONKit 在iOS9 arm7 64位下出现的问题

最近遇到了一个关于JSONKit的问题,在项目加了arm7 64位以后,JSONKIT会出现[params JSONString] forKey:@”gson”];报错的情况,如下图

Mou icon

具体原因不太清楚,这是iOS9出现的新问题,好像是字典变字符串时出问题了。下面直接附上解决办法:

  1. 找到JSONKit.h文件,在JSONKit.h文件中找到 @interface NSDictionary (JSONKitSerializing),在其中添加一个XMJSONString方法,如下图
    Mou icon

  2. 找到JSONKit.m文件,在JSONKit.m文件中实现刚才添加的方法,实现如下图
    Mou icon
    附上实现代码:

    - (NSString *)XMJSONString{
        NSError *error = nil;
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self
                                                           options:NSJSONWritingPrettyPrinted
                                                             error:&error];
           if ([jsonData length] && error == nil){
            NSString *jsonString = [[NSString alloc] initWithData:jsonData
                                                         encoding:NSUTF8StringEncoding];
            NSString *replaceString = [jsonString stringByReplacingOccurrencesOfString:@"\n" withString:@""];
            NSString *treplaceString = [replaceString stringByReplacingOccurrencesOfString:@"\\" withString:@""];
            return [treplaceString stringByReplacingOccurrencesOfString:@" " withString:@""];
        }else{
            return nil;
        }
    }
    

PS:如果不知道怎么去添加方法的话,可以去云盘中下载改写好的JSONKit的.h和.m文件,然后直接把这两个文件替换掉就行。这里是云盘链接: http://pan.baidu.com/s/1gd59ed9 密码: s5eh
注意,文件替换之后,JSONKit可能会出现19个关于ARC的错误,在项目里找到TARGETS-Build Phases,加上如下图的设置即可
Mou icon

最后,不要忘记在这里使用的方法改为你刚才添加的方法(- (NSString *)XMJSONString)哦。格式为:

[request addPostValue:[params XMJSONString]];
if (type.length != 0) {

}

Mou icon

shell常用命令&脚本编写

###常用命令

  1. 想看看你的Shell是哪一种,执行命令: echo $SHELL

    1
    2
    3
    在Linux中,$符号代表一个shell变量。所有的shell都用这种方式使用变量。有一些shell变量在你的系统启动
    的时候就有了默认值。例如,$SHELL$LOGNAME是你的登录名,而$PATH变量指明了你的shell命令的搜索范围。
    echo命令的作用就是打印出你的输入。如果你的输入具有shell的特殊意义,例如shell变量,他就输出变量的值。
  2. ls -la

    1
    2
    3
    4
    5
    6
    7
    8
    9
    这行命令的意义是输出当前目录的所有文件的文件名,l代表“long”,a代表“all”,有了l选项,你会发现,输
    出的内容比较丰富,不只包括文件 名,还有文件的访问权限,所有者,所属组等。你会发现这个命令会在屏幕上
    输出大量的信息,如果当前目录的文件比较多的话。现在就是“pipe”出场的时候了。
    ls -la | more
    ls -l a*
    这个命令会列出在当前工作目录下所有的以小写a开头的文件,比如说abc.txt,alpha.jpg等等。
    ls a?cd
    这条命令会列出所有以小写a开头隔一个未知字符以小写cd结尾的所有文件。例如adcd,axcd,但是不会列出adfdcd,
    也不会列出axcd.txt。
  1. man:如果你想了解每一个命令代表什么含义以及他的用法,你就可以使用man(意义为manual)命令,例如:

    man ls ,man输出的内容是为系统管理员和开发者编写的,如果你想了解更多命令的用法,你可以去找网络上
    的Linux命令文档,有一个非常方便的就是丹尼尔·巴雷特的Linux的袖珍指南。
    
  1. su和sudo

    su命令的作用是切换用户,这也被称为超级用户,因为在有些系统中su命令可以使你以系统的所有权限用户
    root登录。除非你是系统管理员,否则我绝不推荐你使用su切换到root,因为这可能给你带来很多麻烦。
    一个相对安全的多的办法是使用sudo命令,这个命令可以上你以root权限运行一个命令。这两个命令都需要
    系统密码。在大多数Linux的桌面发行版中这两个是相同的,就是你系统的第一个用户设置的密码。
    
  2. grep:grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

    例如:
    grep foo /etc/passwd
    返回在password文件中所有的含有foo的行
    grep -i “foo” /etc/passwd
    -i选项是忽略大小写,这就意味着若某一行含有FOO或FOo也会被搜索到。
    grep还支持递归搜索:
    grep -r “foo” /home/sjvn
    这条命令将会搜索/home/sjvn目录及其子目录下所有的包含“foo”的行
    grep也通常与其他命令串连起来使用,例如:
    ls -la | grep foo*
    列出当前目录下任何以foo开头的文件或目录。例如如下文件将被匹配:foo,foobar,foolish.txt等等。
    
  3. history : 显示出最近使用的全部命令

  4. ! : 返回上一次使用的命令

    如: ! ls 显示出上一次ls 命令的具体内容.选取哪一个命令后默认已经将该命令复制到剪切板,
    直接command+v就可以粘贴该命令了.
    
  1. cat + 文件名 : 列出该文件的内容

  2. mv +旧文件名 + 新文件名 : 更改文件名

  3. 切换文件目录

    cd : 根目录,即当前用户的目录
    cd . : 当前目录
    cd .. : 进入当前目录的上级目录
    
  1. ./可执行文件 : 执行当前文件

  2. ls : 列出当前用户的所有文件夹

  3. ls -F : 列出当前用户的文件夹,如是文件夹,文件名后面有/

  4. ls -lrt : 以文件修改的时间列出当前用户的文件夹

  5. tab : 补齐正在输入的文件名

  6. clear:如果你觉得你的屏幕上有太多的东西,看起来很讨厌,可以使用clear命令清空文件/目录命令

  7. cp:cp代表copy,就是复制,他可以复制一个或多个文件到指定的一个或多个目录下。

    一个通常的用法是:
    cp fred.txt ethel.txt
    把fred.txt中的内容复制到当前文件夹中名为ethel.txt中
    cp fred.txt /home/sjvn/docs/fred.txt
    把fred.txt复制到指定文件中。
    cp *.txt  /home/sjvn/docs/
    复制当前目录下所有以.txt结尾的文件到指定的目录下。
    cp -r /home/sjvn/docs/* /home/sjvn/backup
    递归的复制在/home/sjvn/docs/目录下的所有文件到指定的文件夹。
    
  1. hostname:显示你当前登录进去的计算机的名称。

  2. mv:mv(意义为move)顾名思义就是移动,可以移动指定文件到指定位置。当然这个命令有的时候还可以用来实现重命名。

    例如:
    mv fred.txt ethel.txt
    这条命令的作用你可以简单的认为是重命名fred.txtethel.txt。
    当然此命令还有其他用法,此处不再一一罗列,用法与cp类似,只是这条命令不再保留原文件。
    
  1. rm:rm代表remove,是删除的意思,所以我运行:

    rm fred.txt
    我将删除fred.txt。
    我强烈推荐你在执行rm命令的时候使用-i选项。这儿选项将在你执行命令的时候询问你是否要真的删除文件。就像这样:
    rm -i fred.txt
    

###编写shell脚本

  1. 例如:find + <条件> 是执行命令,意思为查找文件

    $ find ./ -size +200M -exec du -h {} \;  
    //表示在当前目录下查找大于200M的文件
    
  1. 但是每一次输入这些命令,比较麻烦,如果有更多的命令需要一起执行,那将会更加麻烦,我们可以事先将我们需要执行的一系列命令放在一个文件中,这个文件就是一个脚本文件,以.sh结尾,然后编译脚本,最后执行脚本就可以得到我们想要执行一系列命令的结果,这对于我们经常用的一系列命令非常方便。

    vim findLarger200M.sh
    //创建一个脚本并打开
    find ./ -size +200M -exec du -h {} \;
    //在里面利用find写一个查找文件脚本
    chmod u+x findLarger200M.sh
    //编译脚本,生成可执行脚本文件
    ./findLarger200M.sh
    //执行,注意是 ./ + 脚本文件名
    

vim 编辑器常用命令

vim 编辑器常用命令说明

启动or退出vim

1
2
3
在终端输入 vimtutor+回车 进入vim 帮助文档 vimtutor 
:q! : 不保存当前文档就退出
:wq! : 保存当前正在编辑的文档然后退出

移动光标命令

1
2
3
4
5
6
h ⬅️ 向左移动一个字符
j ⬇️ 向下移动一行
k ⬆️ 向上移动一行
l → 右移动一个字符
$ 光标移动打牌行尾
^ 光标移动打牌行首 注: 0 也可以返回到行首

插入模式or普通模式命令

1
2
3
4
5
6
7
i : 从当前光标处进入插入模式
I : 进入插入模式,并置光标于行首
a : 追加模式,置光标于当前光标之后
A : 追加模式,置光标于行末
o : 在当前行之下新加一行,并进入插入模式
O : 在当前行之上新加一行,并进入插入模式
Esc:退出插入模式

复制删除类命令

1
2
3
4
5
6
7
8
9
10
x : 删除光标当前的字符	
d$: 删除光标处到改行末尾的内容
dw: 删除一个字
dd: 删除本行内容
ndd:删除从光标处所在行往下n行的内容
cc: 删除当前行并进入编辑模式
p : 在按dd后删除的内容暂时存在缓冲取中,p 可以将这些内容粘贴到光标所在处下面
P : 在按dd后删除的内容暂时存在缓冲取中,p 可以将这些内容粘贴到光标所在处上面
yy: 复制光标所在行
nyy:复制从光标处所在行往下n行的内容

替换更改类命令

1
2
3
4
5
6
7
8
9
10
11
r : 替换当前字符
R : 替换当前字符之后的全部内容
cw: 删除当前字,并进入编辑模式
c$: 擦除从当前位置至行末的内容,并进入编辑模式
s : 删除当前字符并进入编辑模式
S : 删除光标所在行并进入编辑模式
:s/old/new : 将old 更改为 new
:%s/old/new/g : 将全文的old 更改为 new
:#,#s/old/new/g : 在两行内替换所有的字符串 old 為新的字符串 new
:%s/old/new/g : 在全文件內替换所有的字符串 old 為新的字符串 new
:%s/old/new/gc : 進行全文替换時詢問用戶確認每個替換需添加 c 選项

翻页命令

1
2
3
4
5
6
7
8
ctrl+f : 向下翻一页
ctrl+b : 向上翻一页
ctrl+d : 向下翻一页
ctrl+u : 向下翻一页
:行号 : 跳转到指定行
行号+G : 同样可以跳转到指定行
ctrl + G : 显示当前行的信息
G : 光标直接跳转到文档末尾

保存文件类命令

1
2
3
4
5
6
7
:w  :  保存正在编辑的问价
:#,# w 文件名 : 将#与#行之内的内容写到文件中
:r 文件名 : 将文件中得内容追加到正在编辑文件的光标所在行
:行号,行号 w! >> 文件名 :将一个正在编辑的文件的几行追加到另一个已经存在的文件中
cp 文件名1 文件名2 :将文件1 的内容移动到文件2中 (文件1.2 都存在)
cp 文件名 ..:将文件移动到上级目录(该目录,上级目录都包含该文件)
mv 文件名1 文件名2 : 将文件名1更改为文件名2(文件1不存在,只有文件2)

其他命令

1
2
3
4
5
6
% : 匹配当前配对的符号 如: ( ) [ ] { }	 * *等等
:! : 这样就可以执行外部命令了
:help : 可以查看帮助文档
command + [ ] : 分别切换到左右不同的终端界面
source 文件 : 终端重新加载该文件
open : 打开文件命令

mac下如何安装iterm2并使用zsh

一、安装iTerm2

1. 下载iTerm2,建议去官网下载,网址:http://www.iterm2.com/,也可以在下面分享云盘里取压缩包
2. 把iTerm2移动到应用程序文件夹中
3. 双击iTerm2来启动iterm2,并在dock中保留

二、安装zsh

1. 下载oh-my-zsh,这里分享一个云盘文件,里面有iterm2、oh-my-zsh以及下面所需要的dotfiles
   链接: http://pan.baidu.com/s/1eQyj02Y 密码: 5tca
2. 移动oh-my-zsh到根目录下  
   mv oh-my-zsh ~/.oh-my-zsh
3. 下载dotfiles,可以执行下面命令下载,也可以直接在上面分享云盘里取 
   git clone http://github.com/dorayo/dotfiles.git
4. 移动dotfiles到根目录下 
   mv dotfiles ~/dotfiles
5. 切到dotfiles文件夹下 
   cd ~/dotfiles
6. 执行install.sh  
   ./install.sh
7. chsh -s /bin/zsh
8. 关闭并重新打开iTerm2就OK了

成功搭建hexo本地博客并部署到github上

一、搭建hexo本地博客

  1. 首先是安装Brew。好多人说Mac OS X上自带有brew,但是我今天试了N多遍,都是cannot find brew(我的系统是OS X Yosemite 10.10.5),于是只能安装brew了。

    打开Iterm,输入以下安装命令:
    curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo tar xvz -C/usr/local --strip 1
    安装brew成功后如图1所示: 
    当brew安装成功后,就可以随意安装自己想要的软件了,例如wget,命令如下:
    sudo brew install wget  
    卸载的话,命令如下:
    sudo brew uninstall wget
    查看安装软件的话,命令如下:
    sudo brew search /apache*/
    注意/apache*/是使用的正则表达式,用/分割。
    

    Mou icon
    图 1

  2. 安装好brew后,就是安装git和Node.js

    git安装命令如下:
    sudo brew install git 
    安装成功如图2所示:
    Node.js安装命令如下:
    sudo brew install -g node
    

    Mou icon
    图 2

  3. git和Node.js都安装成功后,安装hexo

    安装hexo的命令如下:
    sudo npm install hexo -g
    成功后如图34所示:
    注意:以上命令以sudo开头一定不要忘记加sudo,这是实践中的经验
    

    Mou icon
    图 3
    Mou icon
    图 4

  4. 创建hexo文件夹。hexo安装成功后,,在你喜爱的文件夹下(如: Desktop/hexo ),执行如下命令:

    创建hexo文件夹:
    hexo init +文件夹名字例如:hexo
    安装依赖包:
    npm install
    这两步成功后如图5所示:
    

    Mou icon
    图 5

  5. 启动本地服务。现在我们已经搭建起本地的hexo博客了,执行以下命令(在 H:\hexo ),然后到浏览器输入 localhost:4000 看看。

    hexo generate
    成功后如图6所示:
    hexo server
    成功后如图7所示:
    hexo博客如图8所示:
    

    Mou icon
    图 6
    Mou icon
    图 7
    Mou icon
    图 8 好了,至此,本地博客已经搭建起来了,只是本地哦。别人是看不到了

一、部署到github上

  1. 注册Github帐号。

    创建repository
    登录github后,将鼠标点击github右上角“+”号,在下拉菜单上,选择“New repository”项,将跳到如下页面,        填写库名称,勾选“Initialize this repository with a README”,点击“create repository”,即可完        成创建库。
    

    Mou icon

  2. 部署

    编辑 _config.yml (在 H:\hexo 下)。你在部署时,要把下面的 zippera 都换成你的账号名。
    
    deploy:
      type: git
      repository: https://github.com/JinqianChina/JinqianChina.github.io.git
      branch: master
    
    这里需要注意:https://方式可能会出现,部署文件到github和每次更新文件到github时都需要输入github用户 名和密码的情况,这个情况不是一定出现,我在部署的时候遇到了,网上搜了没有找到解决的方式,于是我采用SSH-key方式,ssh 的介绍和设置方法请看 官方教程<https://help.github.com/articles/generating-ssh-keys/> ,不用担心,很简单。
    设置好SSH-key后, _config.yml 配置文件应该为:
    deploy:
      type: git
      repository: git@github.com:JinqianChina/JinqianChina.github.io.git
      branch: master
    
    执行下列指令即可完成部署。
    
    hexo generate
    hexo deploy
    如果提示:ERROR Deployer not found: git
    执行以下以下命令:npm install hexo-deployer-git --save
    

    Mou icon

    完成之后再执行:
    hexo generate
    hexo deploy
    
    记住:每次修改本地文件后,需要 hexo generate 才能保存,hexo deploy 才能部署到github。每次使用命令 时,都要在 ~\hexo 目录下。
    Okay,我们的博客已经完全搭建起来了,在浏览器访问 JinqianChina.github.io 就能看到你的成就了!
    还有一点,有一些用户在hexo deploy之后会有提示验证邮箱
    那么我们要输入我们在git上验证的邮箱
    再次hexo deploy
    就发布上去了。
    就可以看到我们就成就了。。。
    
    tips
    
    hexo现在支持更加简单的命令格式了,比如:
    
    hexo g ==  hexo generate
    
    hexo d ==  hexo deploy
    
    hexo s ==  hexo server
    
    hexo n ==  hexo new