自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Tech in Pieces

Technical blog of Evan Sun

  • 博客(24)
  • 收藏
  • 关注

原创 LeetCode957 Prison Cells after N days

There are 8 prison cells in a row, and each cell is either occupied or vacant. if occupied, cells[i]=1, otherwise 0.and we have the following rules:If a cell has two adjacent neighbors that are both occupied or both vacant, then the cell becomes occupie

2020-07-30 08:58:45 187

原创 从ViewDidLoad()和ViewDidAppear()谈类的生命周期

最初注意到这个,还是因为在viewController里面注意到。然后去查资料,去看这两者有何区别?谷歌了一下 得出来答案如下:当视图控制器首次加载到内存中时,只调用一次。在这里,您希望实例化任何实例变量,并构建在此视图控制器的整个生命周期中存在的任何视图。但是,此时视图通常还不可见。viewDidLoad在视图实际可见时调用,并且可以在视图控制器的生命周期中多次调用(例如,当模式视图控制器被解除并且视图再次可见时)。这是您希望在UI中执行任何布局操作或进行任何绘图的位置,例如,显示模式视图控制器。

2020-07-24 10:47:01 1822

原创 从工程代码示例看ViewController和View文件的架构

我们现在要实现一个个人中心界面的实现个人中心界面由两部分组成,头部(包含用户头像,注册天数等信息)和收藏/发表的文章。我们采用1个viewcontroller和2个view的的组织架构。但是我们注意,这两个view是有区别的,一个是headerView,另一个是可重用的tableViewCell。因此,一个继承的是UIView,另一个继承的是UITableViewCell。所有与重用相关的配置都在viewcontroller里面。其他大量的代码也都在viewcontroller里面。那么vie

2020-07-24 10:43:17 154

原创 UICollectionView的用法

与UITableView类似:使用UITableView需要设置数据源和代理 UICollectionView的使用也需要设置数据源和代理UITableView显示什么内容由数据源决定 想监听UITableView, 由代理决定 UICollectionView显示什么内容由数据源决定UICollectionView监听由代理决定UITableView的内容都显示到cell上 UICollectionView的内容也显示到cell上UITableView自定义cell需要添加到contentView

2020-07-24 10:42:06 248

原创 为什么有的ViewController需要最后继承UIViewDataSource&UIViewDelegate?

这个里面需要实现大量的同名重载函数。这种多出现与viewController中。下面以UITableView为例来讲一下:UITableView的数据源(dataSource)和代理(delegate)UITableView需要一个数据源(dataSource)来显示数据,UITableView会向数据源查询一共有多少行数据以及每一行显示什么数据等。没有设置数据源的UITableView只是个空壳。凡是遵守UITableViewDataSource协议的OC对象,都可以是UITableView的数据源

2020-07-20 04:13:39 206

原创 UITableViewCell对象的重用原理

首先 我们知道这个对象是重用对象,为什么需要重用?iOS设备的内存有限,如果用UITableView显示成千上万条数据,就需要成千上万个UITableViewCell对象的话,那将会耗尽iOS设备的内存。要解决该问题,需要重用UITableViewCell对象。重用原理:当滚动列表时,部分UITableViewCell会移出窗口,UITableView会将窗口外的UITableViewCell放入一个对象池中,等待重用。当UITableView要求dataSource返回UITableViewCell

2020-07-20 04:05:17 255

原创 从UIView文件里的layoutSubview方法谈其 调用场景

首先 我们要明确 init初始化和initWithFrame不会调用layoutSubView然后 在viewcontroller里面,setUpViews的时候,会调用addsubview,这个函数会触发layoutsubview.但是,通过对代码的研究,发现layoutsubview只是在headerview这一个文件里实现了。而在viewcontroller里面,添加subview的时候,是没有直接添加headerview相关实例的(只是在setupview里用到了其实例的一部分),难道这样也算吗

2020-07-16 23:45:03 162

原创 由ViewController对象生命周期谈 生命周期 这一概念

对象的生命周期是个很重要的概念:生命周期控制函数不是简单的一个,而是一个序列://类的初始化方法+ (void)initialize;//对象初始化方法- (instancetype)init;//从归档初始化- (instancetype)initWithCoder:(NSCoder *)coder;//加载视图-(void)loadView;//将要加载视图- (void)viewDidLoad;//将要布局子视图-(void)viewWillLayoutSubviews;/

2020-07-16 02:26:11 132

原创 底层浅谈:什么是视图控制器?

用一句话概括,就是:在iOS应用运行中,屏幕中显示的内容是一组一组的视图对象,他们负责显示屏幕中的内容,而在视图的后面是UIViewController视图控制器,它的作用是管理哪些视图中显示的内容,并协调他们和应用其他部分的关系。但是这么说还是有些抽象,因为一些具体问题并未得到解决,比如说:如何知道我这个视图控制器控制的是哪些视图?“控制”究竟指的是什么?是事无巨细的管理着视图的内容和显示方式,还是说只需要管理视图的加载到消失整个流程即可?下面来仔细的看一下:在一个复杂的iOS应用中, 往往包含多个

2020-07-16 02:25:04 378

原创 代码示例:添加按键使得可以从当前视图控制器跳到另一个

示例:rootViewController和ViewController之间的互相跳转import UIKitclass RootViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = UIColor.green let button = UIButton(type:

2020-07-16 02:21:04 141

原创 底层浅谈:什么是视图?

我最开始的理解 就是我们能在app上看到的一切,从状态栏,导航栏,到弹窗对话框。但是我们如何定义这些视图(比如视图中的控件是什么,位置在哪里,当前视图是否包含子视图,此视图和其他视图之间有哪些交互,对应的方法是怎么样的)?这个问题一直没有得到解决,而处于似懂非懂的状态。下面就从头讲一下什么是视图。说到视图,就是UIView,他是UIKit框架里面最基础的视图类,UIView类定义了一个矩形的区域,并管理该矩形区域内的所有屏幕显示。UIView类负责定义了视图的基本行为,但并不定义其视觉表现, 而是U

2020-07-16 00:43:32 446

原创 代码重构心得

所谓重构,之前的理解大多是:针对重复代码的封装提炼,针对过多if-else结构的整合。然而,在实际操作中,存在很多重构方法。重复代码提炼寻找代码中完成某项子功能的重复代码,将之封装成独立函数,必要时进行调用。class GoodExample { public void someMethod1(){ //code someMethod3(); //code } public void someMethod2(){

2020-07-12 22:55:06 267

原创 UIView和UIVierController的具体分工

refer:https://juejin.im/post/5ed4c06c6fb9a047a8622624我知道这是MVC模式的两个主要组成部分 而且知道ViewController一直都是起到一个控制连接器的作用。但是看了项目代码 发现controller也有显示view的功能 而且貌似只是handle没有网或者没有数据的特殊情况。那么view是干什么的呢?但是他们具体分工是怎么样的呢?你也可以认为UIViewController就是一个相框,而UIView就是一个相片,相框可以随时随地的拿走这个

2020-07-10 13:03:56 158

原创 从swift项目各种类中,重新思考:为什么需要不同的构造器?

首先我们问一下自己:为什么需要构造器?这个问题很简单:因为我们要把抽象的类变为具体的实例对象,而从抽象到具体 就需要对其的一些抽象属性进行具体赋值,所以我们需要构造器来做这个工作,同时也是在告诉其他人,想用这个类,必须要对这些对象进行赋值才能创建一个对象。那为什么我们需要多个构造器呢?实际上 如果我们在类里面定义一个带参数的构造器 当前此类就含有两个构造器了。因为所有的类都有隐含的无参构造器。看了一些资料 大多数都是“使得类更加灵活”。不是非常明白含义,就先这样吧。...

2020-07-10 09:51:38 88 1

原创 UIView.bringSubviewToBack()/sendSubviewToFront()

UIView的层次切换 这两个方法可以将指定的视图推到前面或者隐藏到后面。

2020-07-10 07:54:55 273

原创 XIB和StudyBoard指什么?

StoryBoard 和 Xib 都是用来分离UI样式代码,改善视图代码重用率,增加所见即所得,降低视图测试繁复度的视图系列化工具,他们之间的区别:其中Xib以视图View为主,StoryBoard 以控制器Controller及其之间的关系,以及和视图View的关系为主。还是听的云里雾里的 对吧?再看下面的解释:在学习Storyboard的使用,有三个概念是最容易混淆的:xib、nib、storyboard。xib:是一个可视化文件,可通过拖拽文件进行界面创作和布局。xib实际是个xml文件,x

2020-07-10 03:12:14 664

原创 swift4 CGRect() CGFloat()的参数说明

view坐标系原点在左上角。let rect = CGRect(x: 0, y: 0, width: 100, height: 100)let size = CGSize(width: 100, height: 100)let point = CGPoint(x: 0, y: 0)如果想访问CGRect类的变量的各种属性,直接rect.x, rect.y等等或者我们可以先声明 再赋值,比如:let view = UIView(frame: .zero) //UIView的参数就是个CGRec

2020-07-10 01:11:29 918

原创 IOS学习路线大纲

2020-07-09 03:35:52 352

原创 UICollectionView详解

https://www.jianshu.com/p/abe04dd6164f这是一篇详细解释UICollectionView的文章 我们先从这篇文章开始。基础:collection view 是运用一个灵活多变的布局呈现一系列有序数据项的一种方法。collection view最通常的使用使用像网格状排列来呈现数据项,但是 iOS 的 collection view 的能力不仅限于行和列。使用 collection views, 视觉元素的精确布局可通过子类化定义并被动态改变。所以你可以实现网格,栈,

2020-07-09 02:51:28 5964

原创 LeetCode 695 Max Area of Island

this is a classic flood fill algorithm related problems.4 way dfs, but why the fuck code is not working?class Solution { private int count = 0; public int maxAreaOfIsland(int[][] grid) { if(grid == null || grid.length == 0) return 0;

2020-07-07 01:07:40 122

原创 LeetCode022 Generate Parentheses

这道题最开始又出现了想一口吃个大胖子的情况—直接找到答案。虽然知道常规的方法不可以 所以考虑了递归。递归的确是个好办法 但是完全不知道该如何去写,去找:递归的参数,外部切入点的初始化,递归内部的写法(尾递归/普通递归)递归的结束点和每次向下的初始化点等等…正确的想法是:先用暴力解。此时所谓的暴力解,就是将所有的排列情况都列出来,然后再写一个函数去验证其是不是valid parentheses,验...

2020-07-07 00:54:00 96

原创 Object-C.h与.m文件的区别

为什么.h文件和.m文件里各有1个@interface?它们分别有什么用?.h里面的@interface,不消说,是典型的头文件,它是供其它Class调用的。它的@property和functions,都能够被其它Class“看到”。而.m里面的@interface,在OC里叫作Class Extension,是.h文件中@interface的补充。但是.m文件里的@interface,对外是不开放的,只在.m文件里可见。因此,我们将对外开放的方法、变量放到.h文件中,而将不想要对外开放的变量放到.m

2020-07-06 13:37:14 832

原创 ViewController LifeCycle

we will focused on the differences between viewDidLoad, viewDidAppear, and viewDidLayoutSubviews.The definition given by Apple on viewDidLoad mentioned that it is called after the controller’s view is loaded into memory. To put it in a simple term, it is

2020-07-06 10:14:26 132

原创 静态/非静态成员 以及 private/public 关键字的再理解

忘了记 记了忘 忘了再记 并一次次的加深理解。之所以我们不说 静态/非静态属性 是因为static关键字不但可以修饰属性 也可以修饰方法(甚至类)。因此我们这里统一称作 静态/非静态成员类的静态成员与非静态成员的主要区别在于:静态只能通过 类名.属性名/函数名进行调用 比如:String.valueOf(),类的实例是不能直接调用的而非静态修饰的成员 只有在此类被实例化之后 才能通过这个实例化的成员进行调用。这个是最常用的办法 因为大多数类里面的东西是没有static关键字的。其他两者之间的区别:

2020-07-06 02:50:01 458

空空如也

空空如也

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

TA关注的人

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