自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一个在浏览器中看到的透视Cell实现

其实这只是因为,cell是在UITableView的上层,如果我们需要看到在UITableView下层的UIImageView,我们还需要将UITableView的背景颜色也设置为clearColor。我们可以理解为,设置为clearColor后,这个UIView的在不设置其它熟悉的情况下为透明的。这个效果的实现很简单,但是我觉得作为软件开发的从业者,我们在使用各种各样软件的同时,碰见不寻常的设计或者功能,我们应该多考虑考虑这是如何实现的。然后我们再看一下效果。...

2022-07-23 23:20:53 173 1

原创 Effective系列-02

Effective系列-021.property在OC中,一个对象拥有的实例变量往往声明为属性(property)。而不推荐像Java、C++那种在public/private下声明变量。当我们需要访问一个类的属性时,可以使用点语法,编译器会将点语法转换为调用类中对应属性的setter/getter方法。因此以下两种方法等效: Person *person1=[Person new]; //点语法 person1.name=@"Jack"; NSLog(@"%@",per

2022-05-25 23:08:17 112

原创 Effective系列-01

Effective系列-011. import 与向前声明(forward declaring)1.import当我们创建一个类时,系统会在这个类的头文件中自动替我们import需要的框架//Person.h#import <Foundation/Foundation.h>//或者当创建视图、控制器相关的类时//#import <UIKit/UIKit.h>这是在头文件中必不可少的import,当我们认为每一个Person都需要一个Job时,则需要给我们创建的Per

2022-05-24 23:25:45 139

原创 有关 NSMutableArray 的原理

最近了解了 NSMutableArray 的原理,通过这篇文章了解到了其原理,这次我就将原文的 ARM64 讨论部分省略,对 NSMutableArray 的原理进行自己的总结描述。##C语言中的数组也是我们常说的,当数组需要插入时,都需要对插入的下标后的数组的元素进行移动。同时删除元素也是如此这种情况下,如果数组中的元素特别多,就会非常的耗时,那么我们使用 OC 中的 NSMutableArray 进行上述操作时,会不会也和传统的数组一样?##OC 中的NSMutableArrayNSMuta

2022-02-02 15:57:36 926

原创 经验教训=。=、

在UITableViewCell中设置UIScrollView,再将UICollectionView嵌套到UIScrollView中的情况下,出现了一些问题,调试了很久才解决,所以在此记录一下,防止下次再犯错UITableView的contentOffset因为希望随UICollectionView的offset在一定范围内同步,所以给UICollectionView的offset添加了观察者。出现的问题为刘海屏的高度、navigationbar的高度、包括headerView的高度并没有计算好,导致总

2022-01-24 02:46:54 1836

原创 iOS将UIImage图片切成圆形

在开发过程中我们要尽量避免离屏渲染,虽说现在对 UIImageView.layer 进行圆角设置和遮罩不会触发离屏渲染,但是在 UIButton 设置背景图的情况下 如果对 UIButton.layer 进行上述处理,则会触发离屏渲染。所以我们可以利用 CoreGraphics 将图片画成圆形而不对UIButton进行设置。我们创建一个UIImage的分类 UIImage+Circle,声明一个方法 circle 并实现//.h#import <UIKit/UIKit.h>N

2022-01-20 22:51:15 683

原创 iOS实现UIButton的拖拽功能

在APP界面中,把资讯等功能设置为悬浮的Button并且能够让用户自己拖拽调整位置很常用。这里实现一下上述的功能,我们先看一下效果图这里给UIButton的拖拽的范围进行了设定,超过了这个区域则强行结束拖拽。我们知道UIButton是自带手势事件的,但我们不选择使其自带的手势事件来响应拖拽,其原因为自带的手势不好得到和控制拖拽的状态。我们创建一个 UIPanGestureRecognizer 添加给UIButton- (void)viewDidLoad { [super viewD

2022-01-20 00:30:55 2435

原创 iOS中UICollectionViewCell的详情展开和收起 && UILabel根据文字计算高度

在做项目的时候,想给商品的描述添加一个详情展开和收起功能,在展开之前只展示标题,展开之后展示详细的描述。所以做了一个这个功能,如下图想实现这个功能的关键就是 UICollectionView 的 reloadSection 方法,能够重新加载某一个section,由于了解思路之后实现起来并不难,再怎么样多试试也能找出问题,所以本篇文章主要就讲讲思路和一些细节思路:在知道 reloadSection 方法后 为了达到 cell 的高度能变换 自然需要一个变量能够记录cell的高度//ce

2022-01-19 00:37:43 1142

原创 项目中UITableView加载的优化(二)

上一篇文章谈到了UITableView的优化,主要是探索用户头像设置圆角与否对UITableView的影响。经过测试后,发现其实影响并不是很大,在我自己的项目中,影响是微乎其微。所以优化了这一部分后,继续探索了UITableView的优化。首先说一下,在优化前,我是在UITableView创建后才去请求数据并且布局,这导致了在屏幕首先出现的前几个cell中就会卡顿,这部分的原因就是请求完数据后大量的UI设置阻塞了主线程,会出现卡顿。经过调整请求数据的位置,实现了对这一部分的优化,界面的卡顿明显被解决

2022-01-17 22:02:35 191

原创 UIButton图片和离屏渲染与否对性能的影响

写本篇文章的原因是在开发过程中,遇到了列表加载和滑动会卡顿掉帧的情况,于是打算开始逐渐排查各种原因,最先想到的便是会不会是列表中头像的圆角设置导致掉帧卡顿?于是便开始了测试。首先,关于UIButton的离屏渲染,并不是设置了 layer 的 CornerRadius 和 MasksToBounds 就会导致离屏渲染,在设置了以上两种的情况下,只有设置 UIButton 的背景图片,才会导致离屏渲染,光设置背景颜色和 CornerRadius、MasksToBounds 并不会导致离屏渲染。原因:

2022-01-10 01:10:52 3537

原创 iOS轮播图的简单实现

平常在开发过程中,首页的轮播图总是少不了,轮播图我们都知道肯定是要使用 UIScrollView ,难点就在最后一张图片被滑动时,如何回到第一张图片以及第一张滑动到最后一张。我们可以使用如下方式实现轮播图,在划到3后面的1后,设置 contentOffset 回到最先的1,并设置 pageControl ,即可达到效果 (从1划到3也同理)看一下效果:完成这种轮播图,我们的 View 需要如下的属性和方法@interface RoundView : UIView@prop...

2022-01-07 22:27:34 2829

原创 UITextView 输入&删除时自适应高度

我们在评论栏里会使用到UITextView,这时候就需要令UITextView的高度随着用户输入和删除而自适应高度我们首先看一下效果效果图话不多说,上代码首先,为了使评论栏在键盘弹出后重新设置frame,需要先注册一个通知,监听键盘是否已经弹出[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotifi..

2021-12-31 16:22:46 1330

原创 Block(二)

Block内访问局部变量#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { @autoreleasepool { //局部变量num int num=100; ^{ //进行访问,输出结果为100 NSLog(@"%d",num); }();

2021-10-09 21:49:55 91

原创 Block(一)

Block(块)是Objective-C语言提供的一个强大的特性。Block提供了一种方式,使用这种方式可以创建一组语句(即代码块),并将这些语句赋予另一个变量,随后就可以调用这个变量。从这方面看,块与函数和方法类似,但除了是可执行代码外,还有与栈内存和堆内存绑定的变量。块就是一个实现的闭包,一个允许访问其常规范围之外变量的函数。此外,一个块实际上就是一个对象:它是NSObject的子类,具有父类的相关属性和特性。在学习Block的过程中,第一个难点就是Block的语法。块的语法1.声明块类型

2021-10-09 16:38:13 318

原创 OC属性修饰符

我们列举几个主要的属性修饰符:线程安全类:nonatomic/atomic 读写权限类:readonly/readwrite 内存管理类:assign/weak/strong/copy线程安全类:nonatomic/atomicnonatomic 非原子属性。它的特点是多线程并发访问性能高,但是访问不安全; atomic,特点就是安全但是是以耗费系统资源为代价,所以一般在工程开发中用nonatomic的时候比较多。 系统默认的是atomic,为setter和getter方法加锁,而no.

2021-10-08 19:22:04 427 1

原创 进程与线程

进程和线程是我们老生常谈的话题了,不管是学习还是面试,进程和线程都很重要。现在我们来深入了解一下它们进程(process)操作系统为正在运行的程序提供的抽象,就是所谓的进程。一个进程,就是一个正在运行的应用程序。为了理解构成进程的是什么,我们必须理解它的机器状态:程序中运行时可以读取或更新的内容。进程的机器状态有一个明显组成成分,就是它的内存。指令存在内存中。正在运行的程序和写入的数据也在内存中。因此进程可以访问的内存(即地址空间)是该进程的一部分。进程的机器状态的另一部分是寄存器。

2021-10-07 20:58:53 96

原创 GCD(后续)

在上次,分析了异步执行并发队列和同步执行串行队列,还有异步执行串行队列和同步执行并发队列没有分析。我们简单分析一下同步执行+并发队列不会开启新的线程,因为是同步执行,执行完一个任务才会执行下一个。异步执行+串行队列会开启新的线程,因为任务在串行队列中,所以执行完一个任务才会执行下一个。我们已经知道了利用dispatch_get_main_queue()可以得到主队列,所有在主队列中的任务都会在主线程中去执行。主队列也有两种组合方式,分别是同步执行和异步执行同步执行+主队列

2021-09-28 18:21:14 65

原创 iOS单例模式写法以及GCD

单例模式:保证一个类仅有一个实例,并提供一个访问它的全局变量点。在OC中,构建单例模式较简单的是提供一个类方法getInstance来进行构造和访问。#import "Count.h"@implementation Countstatic Count* _instance=nil;+(instancetype)getInstance{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{

2021-09-27 17:21:28 692

空空如也

空空如也

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

TA关注的人

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