Skip to content

Instantly share code, notes, and snippets.

Working from home

DreamPiggy dreampiggy

Working from home
Block or report user

Report or block dreampiggy

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
dreampiggy /
Last active Apr 13, 2020
The Core of SDWebImage v5.6 Architecture
title date tags categories author
The Core of SDWebImage v5.6 Architecture
2020-02-22 23:08:12 +0800

This article is based on SDWebImage 5.6. Why i write this article, cause i found that SD's API is constantly iterating, and many of the structures are different from earlier versions. Here is to make a record. We will start from the top of the API's level list below, force on the entire framework's data flow.

dreampiggy / AnimatedImageTests.swift
Last active Feb 2, 2020
AnimatedImage Unit Testing with UIViewRepresentable and ViewInspector
View AnimatedImageTests.swift
extension AnimatedImage {
struct WrapperView: View & Inspectable {
var name: String
var bundle: Bundle?
@State var isAnimating: Bool
var onViewUpdate: (Self, PlatformView, AnimatedImage.Context) -> Void
var body: some View {
AnimatedImage(name: name, bundle: bundle, isAnimating: $isAnimating)
dreampiggy /
Created Oct 22, 2019 — forked from subfuzion/
curl POST examples

Common Options

-#, --progress-bar Make curl display a simple progress bar instead of the more informational standard meter.

-b, --cookie <name=data> Supply cookie with request. If no =, then specifies the cookie file to use (see -c).

-c, --cookie-jar <file name> File to save response cookies to.

View decode-dyn-uti.swift
extension String
/// Creates a string by decoding a sequence of UTF-8 code units.
init?<S: Sequence>(utf8 input: S) where S.Iterator.Element == UTF8.CodeUnit {
var chars: [Character] = []
var decoder = UTF8()
var iter = input.makeIterator()
loop: while true {
switch decoder.decode(&iter) {
case .scalarValue(let scalar): chars.append(Character(scalar))
dreampiggy / cli-nsrunloop.m
Created Mar 29, 2019 — forked from syzdek/cli-nsrunloop.m
Creating an NSRunLoop for a command line utility.
View cli-nsrunloop.m
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
NSRunLoop * runLoop;
CLIMain * main; // replace with desired class
// create run loop
View iOS-Hit-Testing.m
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if (!self.isUserInteractionEnabled || self.isHidden || self.alpha <= 0.01) {
return nil;
if ([self pointInside:point withEvent:event]) {
for (UIView *subview in [self.subviews reverseObjectEnumerator]) {
CGPoint convertedPoint = [subview convertPoint:point fromView:self];
UIView *hitTestView = [subview hitTest:convertedPoint withEvent:event];
if (hitTestView) {
return hitTestView;
View PSPDFFastEnumeration.h
// PSPDFFastEnumeration.h
// PSPDFFoundation
// PSPDFKit is the leading cross-platform solution for integrating PDFs into your apps:
// Try it today using our free PDF Viewer app:
// This file is MIT licensed.
@protocol PSPDFFastEnumeration <NSFastEnumeration>
dreampiggy / GCDMacro.h
Created Apr 13, 2017
GCD main queue Macro
View GCDMacro.h
#ifndef dispatch_main_sync_safe
#define dispatch_main_sync_safe(block)\
if ([NSThread isMainThread]) {\
} else {\
dispatch_sync(dispatch_get_main_queue(), block);\
#ifndef dispatch_main_async_safe
dreampiggy / StringSwitchMacro.h
Created Apr 13, 2017
Objective-C NSString Switch Case Macro
View StringSwitchMacro.h
#define TTD_CASE(str) if ([__s__ isEqualToString:(str)])
#define TTD_SWITCH(s) for (NSString *__s__ = (s); ; )
dreampiggy / CategoryMacro.h
Created Apr 13, 2017
Objective-C Category Property Macro
View CategoryMacro.h
#import <objc/runtime.h>
#define TTD_GET_PROPERTY(property) objc_getAssociatedObject(self, @selector(property));
#define TTD_SET_STRONG(property) objc_setAssociatedObject(self, @selector(property), property, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
#define TTD_SET_COPY(property) objc_setAssociatedObject(self, @selector(property), property, OBJC_ASSOCIATION_COPY_NONATOMIC);
#define TTD_SET_UNSAFE_UNRETAINED(property) objc_setAssociatedObject(self, @selector(property), property, OBJC_ASSOCIATION_ASSIGN);
#define TTD_SET_ASSIGN(property, value) objc_setAssociatedObject(self, @selector(property), value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
#define TTD_SET_WEAK(property) id __weak __weak_object = property; \
id (^__weak_block)() = ^{ return __weak_object; }; \
You can’t perform that action at this time.