- 博客(58)
- 收藏
- 关注
原创 OC 类的结构分析
网络中有个关于类的关系的图图中虚线部分是isa的的继承关系证明如下图对象->类//打印16进制person的内存地址(lldb) p/x person(LGPerson *) $26 = 0x00000001006e8400//读取person的内存地址(lldb) x/4gx 0x00000001006e84000x1006e8400: 0x001d8001000020f1 0x00000000000000000x1006e8410: 0x00000001006e84e0
2020-09-14 08:27:47 689
原创 OC isa结构分析
分析isa结构之前,先了解下OC对象#import <Foundation/Foundation.h>#import "Person.h"@interface Student : NSObject@property(nonatomic,copy) NSString *name;@end@implementation Student@endint main(int argc, const char * argv[]) { @autoreleasepool {
2020-09-14 08:26:06 284
原创 iOS 内存对齐原理
计算机中内存空间是按照 byte 划分的,计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个数的倍数,这就是所谓的内存对齐。OC类本质上是一个结构体。以结构体为例struct Person { double a; // 8 char b; // 1 int c; // 4 short d; // 2 }person;struct Student { double a; //8
2020-09-14 08:23:44 280
原创 iOS OpenGL ES 旋转立方体
思路立方体有6个面,由于OpenGL es的特性,每个面只能有两个三角形组成,一个三角形有三个顶点,在不考虑使用顶点索引的情况下,一共需要36个顶点立方体,需要开启深度测试和光源着色器旋转立方体,需要做矩阵变换,使用固定着色器的baseEffect.transform.modelviewMatrix可以旋转矩阵数据typedef struct { GLKVector3 positionCoord; //顶点坐标 GLKVector2 textureCoord;
2020-09-08 13:26:45 334
原创 OC对象alloc、init和new的底层实现
oc中创建一个对象Person *p = [[Person alloc] init];那么alloc做了什么?init又做了什么?可以通过查看苹果官方开源的objc相关的源码objc的源码地址源码是基于objc4-781,781的源码与之前的源码有很大的不同,781做了fastpath和slowpath的区别,781版本代码大概率会走fastpath流程。且与zone相关的api在iOS8之后被废弃了。源码编译参考iOS_objc4-756.2 最新源码编译调试alloc查看源码前看一段代
2020-09-08 11:20:40 294
原创 Swift派发机制
swift派发的目的是让CPU知道被调用的函数在哪里。swift语言支持编译行语言的直接派发、函数表派发、消息机制派发。直接派发直接派发是最快的原因是调用的指令少,并且可以通过编译器进行优化,缺点是由于缺少动态性而不支持基础struct DragonFirePosition{ var x: Int64 var y: Int32 func land(){}}func DragonWillFire(_ position:DragonFirePosition) {
2020-08-19 11:02:26 805
原创 iOS OpenGL ES入门案例
OpenGL ES 是OpenGL针对嵌入式系统设置的标准图形库。它是OpenGL的简化版。但是基本的渲染管线没有大的变化。虽然iOS13开始不再支持OpenGL ES,已转向metal,但是OpenGL ES 仍然可以在iOS中仍可以使用,且其它嵌入式设备仍支持OpenGL ES。同时学习Open GL ES能更好的学习metal。渲染管线顶点缓存区 —>顶点着色器 —> 细分控制器 —> 细分中着色器 —> 图元转配 —>光栅化 —> 片元着色器其中顶点
2020-07-26 15:39:35 861
原创 iOS单例模式对象的创建及销毁
#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@interface User : NSObject/** 单例方法 @return 返回单例对象 */+(instancetype)sharedInstance;/** 销毁对象 */+(void)attempDealloc;/**...
2020-04-29 15:15:47 1643
原创 socket编程之select()
select()函数是异步IO,等待有事件来临时会触发。相对于fork()的有点就是占用的资源较少。服务端代码//// Tcp_server.cpp// Cpp//// Created by JH on 2020/4/8.// Copyright © 2020 JH. All rights reserved.//#include <stdio.h>#...
2020-04-11 00:21:22 468
原创 使用fork()编写socket
服务端//// Tcp_server.cpp// Cpp//// Created by JH on 2020/4/5.// Copyright © 2020 JH. All rights reserved.//#include <stdio.h>#include <iostream>#include <sys/socket.h>...
2020-04-09 20:24:00 774
原创 简单的socket通信
服务端代码//// Tcp_server.cpp// Cpp//// Created by JH on 2020/4/5.// Copyright © 2020 JH. All rights reserved.//#include <stdio.h>#include <iostream>#include <sys/socket.h&g...
2020-04-08 17:09:06 310
原创 vue微信公众号授权页面获取openid、跨域
微信公众号开发需要获取用户的openid,根据微信公众号的官方文档说明,需要做以下几个准备工作1.开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”。注意:不能是ip地址2.配置域名是要求在web服务器中有微信提供的能访问到的文件,所以还需要一个web服务器,如下图第一步:跳转到授权页,获取code let u...
2020-03-17 10:41:36 10556
原创 ios 老项目接入flutter
在已有ios项目中添加flutter模块,在网上找了许多文章,跟着文章一步步操作没有成功。后来在官方英文文档中找到答案。官方文档官方文档添加flutter库第一步在与ios项目同级的文件下,创建一个flutter model。flutter create --template module flutter_module第二步在podfile文件中,添加如下代码use...
2019-12-17 14:18:54 929
原创 ios 去掉导航栏返回按钮文字
@interface UIViewController (Navigation)@end#import "UIViewController+Navigation.h"@implementation UIViewController (Navigation)+(void)load{ ExchangeImplementations(self, @selector(viewWi...
2019-12-11 08:41:08 1107
原创 ios 导航栏(二)——自定义导航栏
目前主要的几种导航栏框架分为三种:使用UINavigationController作为viewController的容器,即每次push的时候将viewController作为一个新的UINavigationController的根视图并管理当前viewcontroller。RTRootNavigationController 对系统的navigationBar进行隐藏或者设置透明,通过一个...
2019-10-24 17:15:38 943
原创 xcode11 新增文件SceneDelegate
xcode11创建项目新增SceneDelegate文件,AppDelegate文件结构也发生变化,在AppDelegate.h文件中没有了window属性,而是在sceneDelegate.h中,可见AppDelegate不管理window而是交给SceneDelegate。由于这些是ios13新增,所以SceneDelegate在ios13以下的系统是不支持。所以xcode11创建的项目如要做...
2019-10-08 15:39:41 12157 2
原创 ios CATransaction事务动画,键盘弹出和消失视图变化
ios的动画的技术方案很多,UIview、CoreAnimation,(1)在UIview的分类中的的类方法中有+animationWithDuration:及其它类似的方法,可以实现一些比较基础的动画可以对UIview的属性使用,如frame、backgroundColor等(2)CoreAnimation框架中CAAnimation类的子类,CABasicAnimation、CAPro...
2019-09-27 16:08:42 810
原创 UINavigationBar的结构
ios中导航栏是开发中常用到的,之前从没有关注过导航栏里面的具体结构。今天抽空具体了解了一下UINavigationBar的父view是一个叫做UILayoutContainerView的视图,该视图对应的控制器就UINavigationController。UINavigationController主要三个部分:navigationBar viewcontrollers too...
2019-08-30 11:46:00 1222
原创 ios组件化开发(一)创建组件化
ios组件化开发,类似于自己写一个第三方库一样,然后被主工程调用。组件化开发,需要一个索引库,因为每个组件都有一个xxx.podspec 文件,因此需要一个库去专门存放索引。这类似于一本新华字典有专门的目录,通过目录可以快速找到对应的组件和版本。1.创建索引库首先可以在github上创建一个远程索引库。然后将该索引库添加到本地pod repo add 本地索引库的名...
2019-08-28 15:11:02 564
原创 KVO原理及监听数组数量发生变化
kvo作用KVO俗称键值监听,它提供一种机制,当指定的对象的属性被修改后,则对象就会接收到通知。就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知想要的观察者。使用步骤:步骤一给对象添加监听者首先创建一个person类@interface Person :NSObject@property(nonatomic,copy) NSString *name;...
2019-08-26 16:00:06 1033 1
原创 ios APP启动原理与自定义UIApplication
iOS APP启动原理在oc项目中,入口文件是main.m文件,App启动时首先会初始化所有的类,然后再调用main.m中的main函数。启动过程:从类的初始化到main函数的执行 执行AppDelegate中的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDicti...
2019-04-01 08:16:30 940
原创 swif4基础学习(7)-其它
import UIKitvar str = "Hello, playground"//逃逸闭包//闭包做为函数的参数传递时,可能会在函数体结束后被调用,这个闭包逃离了这个函数体的作用域,那么我们就说这个闭包是逃逸型的闭包func testClosure(closure:@escaping ()->Void){ print("test") //...
2019-03-27 16:37:18 197
原创 swif4基础学习(6)- 继承、协议等
import UIKitvar str = "Hello, playground"//1下标 subscriptstruct TestTable{ subscript(index:Int)-> String{ return "table" } subscript(key:String)->String{ ...
2019-03-27 16:32:36 245
原创 swif4基础学习(5)- 结构体、属性
import UIKitvar str = "Hello, playground"//1.结构体//使用时注意:结构体总是通过被复制的方式在代码中传递,值类型//类:引用类型struct SizeStruct{ var height:Float = 10 var width:Float = 21}class SizeClass{ var height...
2019-03-27 16:02:55 408
原创 swif4基础学习(4)- 闭包、枚举
import UIKitvar str = "Hello, playground"//1.1闭包,与oc中的block类似//方法声明: (参数) -> 返回值 {函数体}//闭包声明:{(参数) -> 返回值 in 函数体}//可以在代码中使用或者用来作为参数传值。let names = [5,2,10,23,4]let namesSort = names.so...
2019-03-27 15:21:42 222
原创 swift4基础学习(3)- 函数
import UIKitvar str = "Hello, playground"//函数//1.无返回值的函数func method(){ print("无返回值")}method()//2 有参数,有返回值/* 方法名:returnMethod 参数名:number ,number2 参数类型:Int,Int -> 后面代表...
2019-03-27 15:00:22 215
原创 swift4基础学习(2)- 循环、元组、条件语句
import UIKitvar str = "Hello, playground"//1.for循环//1.1 index 的声明周期只存在for循环内//...指闭区间 1~10for index in 1...10{ print("num=\(index)")}//1.2开区间1-4for index in 1..<5 { print("ka...
2019-03-27 14:27:36 311
原创 swift4基础学习(1)- 数据类型、数组、字典
通过palyground学习swift4数据类型、数组、字典import UIKitvar str = "Hello, playground"//1.数据类型//可以声明中文名,因为swift使用unicode编码func 常量(){ //let 声明常量,只能为其赋值一次,const //var 声明变量 //自动推断变量类型是int、string等 ...
2019-03-27 14:08:28 192
原创 UICollectionView简单瀑布流实现
1.如何实现瀑布流?继承基类UICollectionViewLayout,并实现方法,并在UICollectionView中使用这个布局。2.如何实现UICollectionViewLayout子类的方法实现下面四个方法//1.告诉当前layout对象,更新当前布局- (void)prepareLayout;//2.返回指定indexPath下的 UICollectionV...
2019-03-27 11:20:35 1604
原创 UICollectionView使用详情
UICollectionView使用步骤1.创建布局类UICollectionViewFlowLayout2.创建UICollectionView、UICollectionViewCell的子类并注册3.实现UICollectionView的代理方法初始化UICollectionView、UICollectionViewFlowLayout-(void)initColle...
2019-03-27 09:25:27 210
原创 EF Core一对多和多对多
1.Model配置Entity Framework Core 提供了两种方式A.使用 fluent API 配置模型可在派生上下文中覆写OnModelCreating方法,并使用ModelBuilder API来配置模型。此配置方法最为有效,并可在不修改实体类的情况下指定配置。Fluent API 配置具有最高优先级,并将替代约定和数据注释。 class ...
2019-03-18 11:36:48 9187
原创 Mac OS下创建一个EF Core例子
Mac os可以使用Sqlite3数据库,该项目来自官方案例使用新数据库在 ASP.NET Core 上开始使用 EF Core首先创建一个 项目创建新项目.net core mvc 运行以下命令以创建 MVC 项目: dotnet new mvc -n EFGetStarted.AspNetCore.NewDb 更改为项目目录。你输入的下一个命令需要针对新...
2019-03-18 11:05:12 1082
原创 asp.net core MVC(二) web host的默认配置
上一篇学习了,如何创建一个.net core 项目以及其空模板下的文件。这一篇学如何进默认配置首先进入入口文件Progam.cs文件在Main函数中调用CreateWebHostBuilder方法,改方法返回一个IWebHostBuilder类型。在该方法中有一个WebHost类,他有一个静态方法CreateDefaultBuilder,通过安装recharper可以查看源代码,代...
2019-03-02 22:53:16 544
原创 asp.net core MVC(一) 项目创建和项目结构
一、项目创建微软提供了两种创建方式visual studio 2017 dotnet cli首先安装visual studio,安装的时候选择带有.net core SDK的安装包,由于.net core 是跨平台的所以在mac系统也可以开发,主要归功于其SDK。安装成功后启动工程1.使用visual studio 2017 创建vs2017和vs for mac都可以,选...
2019-03-02 20:57:28 3134
原创 ios UITableView重用机制和简单自定义tableView
UITableView是继承于UIScrollView的一个子类。当UITableView滚动时,如果不用重用机制会重复初始化原来已初始化的cell,用重用机制会节省性能。UITableView重用机制的原理UITableView为了做到显示和数据分离, 使用UITableViewCell的视图用来显示每一行的数据, 而tableView的重用机制就是每次需要去显示池和重用池去查找有没有可...
2019-02-20 13:32:23 529
原创 ios tableview点击cell不响应
当点击UITableView的cell时,-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;方法不执行。在只考虑tableview的父视图有UITapGesutreRecoginzer手势的情况下。(UIPanGesutreRecoginzer手势是可以...
2019-02-13 15:35:05 4873
原创 ios事件冲突处理
多手势冲突当两个手势绑定在不同的view上,当滑动两个View公共区域时,只能响应上面view的手势。1.如何使两个手势都响应?自定义一个手势以UIPanGestureRecognizer为例。使用UIGestureRecognizer的代理方法代码#import <UIKit/UIKit.h>@interface GestureOne : UIPanGest...
2019-02-13 10:28:42 603
原创 ios事件处理层级及响应链
事件的种类运动事件:加速仪、陀螺仪、磁强仪等远程控制事件:蓝牙耳机等触摸事件:界面触摸等界面是如何交互当用户的手真正触摸到屏幕时,程序内部是如何响应的?当触摸到屏幕时会生成一个touch Event(触摸事件),添加到UIapplication管理的事件队列中,UIApplication会从事件队列中(runLoop)中取出事件来分发到应响应的视图去处理。当触摸事件被UIA...
2019-02-11 14:44:56 668 1
原创 RATreeView使用细节
RATreeView是树状列表的第三方库,使用方法与UITableView类似,需要返回当前cell,每个树有多少层等,网上的Demo中需要创建TreeModel如下#import @interface RaTreeModel : NSObject@property (nonatomic,copy) NSString *name;//标题@property (nonatomic,s
2018-01-11 11:18:58 1478
原创 oc 处理递归数据
最近碰到接口返回的数据是一个递归数据,例如一个公司有多个部门,部门中可能有多个子部门,也有可能没有子部门。这里使用了递归处理数据数据模型大概如下,在类中有许多属性,同时有一个数组是存放这个类,然后对返回数据进行解析@interface EFDeptModel : NSObject@property(nonatomic,copy)NSString *deptName;@prop...
2017-12-28 21:30:12 1189
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人