Tsui的个人博客


  • 首页

  • 归档

  • 分类

  • 标签

React Native常用组件之View

发表于 2016-09-14   |   分类于 ReactNative

JSX和组件的概念

React的核心机制之一就是虚拟DOM:可以在内存中创建的虚拟DOM元素。React利用虚拟DOM来减少对实际DOM的操作从而提升性能。传统的创建方式是:

View-01

但这样的代码可读性并不好,于是React发明了JSX,利用我们熟悉的HTML语法来创建虚拟DOM:

View-02

在实际开发中,JSX在产品打包阶段都已经编译成纯JavaScript,JSX的语法不会带来任何性能影响。因此,JSX本身并不是什么高深的技术,可以说只是一个比较高级但很直观的语法糖。

View组件中常见的属性

React Native组件View,其作用等同于iOS中的UIView, Android中的android.view,或是网页中的<’div’>标签,它是所有组件的父组件。

阅读全文 »

自定义日历View

发表于 2016-08-28   |   分类于 iOS

效果图

SMCalendar

使用方法

通过类方法创建日历,添加到控制器view即可。可以自定义控制size

1
2
3
4
CGRect frame = CGRectMake(10, 150, [UIScreen mainScreen].bounds.size.width - 2 * 10, [UIScreen mainScreen].bounds.size.width - 2 * 10 +50);
SMCalendarView *calendarView = [SMCalendarView calendarViewWithSize:frame.size];
calendarView.frame = frame;
[self.view addSubview: calendarView];
阅读全文 »

自定义气泡弹窗控件(popView)

发表于 2016-08-27   |   分类于 iOS

在开发中,经常会遇见点击某个按钮,弹出一个类似对话框的界面,但对话框往往过于简单,所以就出现了微博,QQ,微信上的气泡View,有多个选项,同时有图片和文字。于是就封装了popView自定义控件。

实现效果

自定义popView效果图

快速集成

  • 让控制器成为其代理
1
2
3
4
5
6
7
8
- (void)initPopView
{
// 创建popView
SMPopView *popView = [SMPopView popViewForTitles:@[@"相册",@"文章列表", @"点赞", @"添加好友"] withImages:@[@"album", @"draft", @"like", @"new_friend"]];
popView.delegate = self;
self.popView = popView;
[self.view addSubview:popView];
}

代理方法

1
2
3
4
5
6
7
/**
* 点击popView的item后的回调方法,传回Item的索引值
*/
- (void)popView:(SMPopView *)popView didClickItemIndex:(NSInteger)index
{
NSLog(@"%zd", index);
}
阅读全文 »

GCD

发表于 2016-07-13   |   分类于 iOS

GCD是什么

GCD的全称是Grand Central Dispatch,纯C语言。

GCD会自动利用更多的CPU内核(比如双核、四核)

GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)

程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码

任务与队列

任务

  • 同步的方式执行任务
1
2
3
4
queue:队列 
block:任务

dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);
  • 异步的方式执行任务
1
dispatch_async(dispatch_queue_t queue, dispatch_block_t block);
阅读全文 »

Block

发表于 2016-06-15   |   分类于 iOS

简介

Block本质上是指向一个结构体的指针。Block可以形象的比作一个函数体。使用代Block你可以像调用其他标准函数一样,传入参数数,并得到返回值。但是它远比函数更加强大。

循环引用

1.如果没有对block进行copy操作,block就存储于栈空间

2.如果对block进行copy操作,block就存储于堆空间

3.如果block存储于栈空间,不会对block内部所用到的对象产生强引用

4.如果block存储于堆空间,就会对block内部所用到的对象产生强引用

当block中的对象被强引用时,导致循环引用,内存无法释放

解决方法:使用__weak 指向对象

1
2
3
4
5
6
Person *p = [[Person alloc] init];
// 解决循环引用
__weak typeof(p) weakP = p;
p.testBlock = ^{
[weakP run];
};

定义

1
2
3
4
返回值类型(^block变量名)(形参列表) = ^(形参列表) {
};
调用Block保存的代码
block变量名(实参);
阅读全文 »
12345
Tsui

Tsui

21 日志
4 分类
5 标签
GitHub
© 2015 - 2016 Tsui
由 Hexo 强力驱动
主题 - NexT.Muse