delegate

理解 iOS 和 macOS 的内存管理

送分小仙女□ 提交于 2020-11-03 13:30:36
在 iOS 和 macOS 应用的开发中,无论是使用 Objective-C 还是使用 swift 都是通过引用计数策略来进行内存管理的,但是在日常开发中80%(这里,我瞎说的,8020 原则嘛😆)以上的情况,我们不需要考虑内存问题,因为 Objective-C 2.0 引入的自动引用计数(ARC)技术为开发者们自动的完成了内存管理这项工作。ARC 的出现,在一定程度上拯救了当时刚入门的 iOS 程序员们,如果是没有接触过内存管理的开发者,在第一次遇到僵尸对象时一定是吓得发抖😱😱😱My Brains~。但是 ARC 只是在代码层面上自动添加了内存管理的代码,并不能真正的自动内存管理,以及一些高内存消耗的特殊场景我们必须要进行手动内存管理,所以理解内存管理是每一个 iOS 或者 macOS 应用开发者的必备能力。 本文将会介绍 iOS 和 macOS 应用开发过程中,如何进行内存管理,以及介绍一些内存管理使用的场景,帮助大家解决内存方面的问题,本文将会重点介绍内存管理的逻辑、思路,而不是类似教你分分钟手写 weak 的实现,之类的问题,毕竟大家一般拧螺丝比较多,至于✈️🚀🛸的制造技艺嘛,还是要靠万能的 Google 了。 本文其实是内存管理的起点,而不是结束,各位 iOS 大佬们肯定会发现很多东西在本文中是找不到的,因为这里的内容非常基础,只是帮助初学 iOS

SliverAppBar 介绍及使用

时光怂恿深爱的人放手 提交于 2020-11-02 19:23:03
SliverAppBar控件可以实现页面头部区域展开、折叠的效果,类似于Android中的CollapsingToolbarLayout。 先看下SliverAppBar实现的效果,效果图如下: SliverAppBar控件需要和CustomScrollView搭配使用,SliverAppBar要通常放在slivers的第一位,后面接其他sliver控件。 CustomScrollView( slivers: <Widget> [ SliverAppBar( ), // 其他sliver控件 ], ) SliverAppBar和其他slivers控件的结构如下: SliverAppBar中有一个非常重要的参数flexibleSpace,flexibleSpace是SliverAppBar中展开和折叠区域,flexibleSpace与expandedHeight一起使用, expandedHeight表示flexibleSpace的高度, SliverAppBar( expandedHeight: 200.0, flexibleSpace: FlexibleSpaceBar( ), ), SliverAppBar其他常用属性说明如下: 属性 说明 leading 左侧控件,通常情况下为"返回"图标 title 标题,通常为Text控件 actions 右侧控件

c# winForm 等待窗体的实现

99封情书 提交于 2020-10-26 08:28:06
最近在做一个项目,需要用到等待窗体,在DevExpress下面有SplashScreen控件可以使用,同时也有ProgressIndicator控件能用,但是如果没有用Dev开发的话,我们就需要自定义一个等待窗体了。 本项目开放源代码,下载地址见本文末尾(如果本程序有帮助到您,希望留言评论,感谢) VS环境:vs2017,低版本环境可以使用VS Convert转换工具进行版本转换,或者直接看源代码,复制到新项目中也可以。 首先,把截图放上来:(界面没有优化) 多功能Loading中,实现了实时显示执行进度的功能,该功能也可以改进为用进度条显示。 实现的功能比较简单,就是在程序处理 一些耗时比较多的代码时,将Loading窗体展示给用户,并在后台执行耗时操作,这样能够给用户较好的体验。 核心代码是我自己写的一个SplashScreenManager类:有2个方法:1、ShowLoading()2、CloseLoading() 调用方法举例: //实例化一个窗口,窗口需要自己定义哦 SimpleLoading loadingfrm = new SimpleLoading(this); //将Loaing窗口,注入到 SplashScreenManager 来管理 GF2Koder.SplashScreenManager loading = new GF2Koder

UIView的绘制原理

烈酒焚心 提交于 2020-10-25 15:28:11
一、UIView的绘制原理 当UIView调用setNeedDisplay之后,实际上并没有立即发生位图的绘制工作,而是在之后的某个时机进行当前UI视图的真正绘制工作。 当我们调用UIView的setNeedDisplay方法之后,系统会调用view对应layer的setNeedsDisplay方法,相当于在当前layer上打了一个标记; 在当前runloop即将结束的时候调用CALayer的display方法,然后进入我们视图的真正绘制工作。 CALayer的display方法在它的内部实现当中,首先会判断layer的delegate是否响应displayLayer:方法,如果代理不相应就会进入系统的绘制流程当中。如果响应,实际上就为我们提供了异步绘制的接口,这样就构成了UIView的绘制原理。 二、系统绘制流程 在CALayer内部会创建一个backing store(CGContextRef),我们一般在drawRect中可以通过上下文堆栈当中难道当前栈顶的context; 然后layer会判断是否有代理,如果没有代理会调用layer的drawInContext方法;如果实现了代理就会调用delegate的drawLayer:inContext方法,这是发生在系统内部当中的,然后在合适的时机给予回调方法,也就是view的drawRect方法;

探索低版本 .Net 反序列化实现 Exchange RCE

大城市里の小女人 提交于 2020-10-20 10:53:30
作者:EazyLov3 本文为作者投稿,Seebug Paper 期待你的分享,凡经采用即有礼品相送! 投稿邮箱:paper@seebug.org 0x10 起因 近期在众所周知的活动中,各种漏洞利用花样不断,值得好好复盘一番。其中一位蓝方朋友负责的Exchange Server 2010沦陷引起了我的兴趣,因为日志被删没有第一时间找到入侵方法,对比备份后发现ecp目录下存在一名为LiveIdError.aspx的空白文件,Google了一下才发现是 CVE-2020-0688反序列化攻击 ,但细究一下竟发现没有针对Exchange Server 2010及以下版本的公开利用方法,似乎是因为低版本.Net Framework(下称fx)的反序列化限制而难以利用。 在可利用性得到@zcgonvh 前辈肯定之后,本文尝试复现这个漏洞在Exchange Server 2010环境下的利用方法。 0x20 漏洞相关资料 对.Net和Exchange都一无所知的我来说,首先要做的当然是先搞清楚为什么现有的PoC和利用方法不能利用在低版本,具体限制是什么。 0x21 现有的利用方式的关键Payload 在GitHub检索CVE-2020-0688关键字,排名靠前的有以下几个项目 https://github.com/Ridter/cve-2020-0688 https://github.com

.NET简陋服务器

爷,独闯天下 提交于 2020-10-17 19:57:47
服务器是干啥子用滴?监听客户端,响应客户端用滴! 虽然是世界上最简陋的服务器,但是也有几个注意点: 1.因为要一个死循环监听客户端响应,也就是说无法和用户进行交互了,所以防止前台假死就要为监听新起一个线程; 2.要把新起的线程td.IsBackground = true;设置为后台线程,这样的话线程才会随着应用程序的关闭而关闭,不然的话关了窗体,它还在运行; 3.跨线程问题,在新的线程里改变UI会报跨线程改变UI的错误,所以要用Invoke; 4.在监听的死循环中加入 Thread.Sleep(1);这样可以提高应用程序性能,不要担心当服务的线程正在Sleep的时候来了个请求服务器会收不到,其实是收得到的。 加入Thread.Sleep(1)的CPU如图: 不加Thread.Sleep(1)的CPU如图: 所以一定要加! 所以服务器端代码如下: 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 using System

iOS开发从相册选择照片或拍照

纵饮孤独 提交于 2020-10-16 12:44:27
一行代码搞定图片选择 // // gzhPhotoManager.h // 图片选择 // // Created by 郭志贺 on 2020/5/26. // Copyright © 2020 郭志贺. All rights reserved. // #import <Foundation/Foundation.h> #import " ViewController.h " NS_ASSUME_NONNULL_BEGIN @protocol gzhPhotoManagerDelegate; @interface gzhPhotoManager : NSObject + (instancetype)instance; /// 选择图片 /// @param controller 当前控制器 /// @param target 代理 /// @param pSize 选择照片尺寸 尺寸传(0,0)不进行裁剪 - ( void )selectPhotoWithController:(UIViewController *)controller delegate :( id )target size:(CGSize)pSize; @end @protocol gzhPhotoManagerDelegate <NSObject> - ( void )selectedPhotoImage:

CustomScrollView + slivers + SliverAppBar

♀尐吖头ヾ 提交于 2020-10-12 14:13:21
import 'package:flutter/material.dart'; void main()=>runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: CustomScrollViewTestRoute(), ), ); } } class CustomScrollViewTestRoute extends StatelessWidget { @override Widget build(BuildContext context) { return CustomScrollView( slivers: <Widget>[ SliverAppBar( pinned: true, expandedHeight: 250.0, flexibleSpace: FlexibleSpaceBar( title: const Text('Demo'), background: Image.network('http://www.ecobentech.com/img/a.jpg',fit: BoxFit.cover,), ), ), SliverPadding

在视图控制器之间传递数据

梦想的初衷 提交于 2020-10-12 05:42:20
问题: I'm new to iOS and Objective-C and the whole MVC paradigm and I'm stuck with the following: 我是iOS和Objective-C以及整个MVC范例的新手,但我坚持以下几点: I have a view that acts as a data entry form and I want to give the user the option to select multiple products. 我有一个充当数据输入表单的视图,我想给用户选择多个产品的选项。 The products are listed on another view with a UITableViewController and I have enabled multiple selections. 这些产品在另一个带有 UITableViewController 视图中列出,并且我启用了多个选择。 My question is, how do I transfer the data from one view to another? 我的问题是,如何将数据从一个视图传输到另一个视图? I will be holding the selections on the UITableView in an array,

anyRTC iOS Developer 林顺 9月工作总结

时光毁灭记忆、已成空白 提交于 2020-10-09 18:55:10
anyRTC iOS Developer 林顺 9月工作总结 8月31日- 9月4日 本周开发计划: 熟悉rtc、rtm sdk; rtc多频道文档; ARCall 上架AppStore。 工作中遇到的问题 程序无法在真机上运行,报错error reading …bridging-header.h, 需要把在project 中把 objective-c bridging header 文件路径改为本地bridging-header.h 所在位置 关于delegate回调问题,需要仔细看文档是远方触发回调还是本地触发回调 第一次运用md 编写rtc多频道文档,在编写过程中熟悉多频道方法以及回调 第一次上传Ipa 到appstore实践了appstore 上架流程。 遇到证书问题,重启电脑后解决。Archive 时候 遇到bitcode bundle could not be generated, 需要在project中把Enable Bitcode 改成no。需要上传预览图。 9月7日- 9月11日 本周开发计划: 写一个 rtm sdk demo; 熟悉ARCall demo 代码 工作中遇到的问题 上周 appstore 上传app被拒 因为没有上传演示视频,拍摄视频后填入视频连接后重新提交,通过审核成功上架。 测试机 ipad上一直跳出信任窗口,一闪而过无法点击