Skip to content

Instantly share code, notes, and snippets.

View 623637646's full-sized avatar
🎯
Focusing

Yanni Wang 王氩 623637646

🎯
Focusing
View GitHub Profile
@623637646
623637646 / Singleton.h
Last active April 11, 2019 03:48
iOS Objective-C Singleton with Macro!!!
#define MACRO_SINGLETON_H \
+ (instancetype)sharedInstance;\
- (instancetype)init NS_UNAVAILABLE;\
+ (instancetype)new NS_UNAVAILABLE;\
+ (instancetype)allocWithZone:(struct _NSZone *)zone NS_UNAVAILABLE;\
- (id)copy NS_UNAVAILABLE;\
- (id)mutableCopy NS_UNAVAILABLE;\
+ (id)copyWithZone:(struct _NSZone *)zone NS_UNAVAILABLE;\
+ (id)mutableCopyWithZone:(struct _NSZone *)zone NS_UNAVAILABLE;\
@623637646
623637646 / 动态库静态库tips
Last active February 19, 2024 07:36
动态库静态库tips
1. 静态库
只编译不链接
只要头文件在,无需设置依赖
会打包进主工程二进制文件
2. 动态库
既编译又链接
必须设置依赖
不会打包进主工程二进制文件
3. 当且仅当动态库依赖静态库时,才会copy静态库的代码到动态库二进制
@623637646
623637646 / UIImageWithName
Last active November 28, 2018 08:32
Get UIImage by name in framework
#define UIImageWithName(IMAGE_NAME)\
(^UIImage *(NSString *imageName){\
NSAssert(imageName.length != 0, @"imageName is empty");\
if (imageName.length == 0) {\
return nil;\
}\
NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle bundleForClass:NSClassFromString(@"SHPUIModule")] pathForResource:@"SHPUIKit" ofType:@"bundle"]];\
NSAssert(bundle != nil, @"bundle is nil");\
if (bundle == nil) {\
return nil;\
@623637646
623637646 / iOS push notification logic.txt
Last active April 24, 2019 02:54
iOS push notification logic
# iOS 10 or above
1. **Cold start**
1. normal notification
userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:
2. silent notification
userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:
2. **Hot start**
1. normal notification
userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:
@623637646
623637646 / safari_memory_hole.html
Created March 14, 2019 08:53
Safari memory hole
<html>
<head>
<title>Safari Memory Hole</title>
</head>
<body>
<textarea>This file takes 30MB in Chrome but 2GB in Safari</textarea>
<script>
var m = {};
@623637646
623637646 / Associated.m
Last active April 24, 2019 02:54
Objective C weak associated
- (id)weakObject {
id (^block)() = objc_getAssociatedObject(self, @selector(weakObject));
return (block ? block() : nil);
}
- (void)setWeakObject:(id)object {
id __weak weakObject = object;
id (^block)() = ^{ return weakObject; };
objc_setAssociatedObject(self, @selector(weakObject),
block, OBJC_ASSOCIATION_COPY);
@623637646
623637646 / ReactiveObjCBug
Last active May 28, 2020 11:57
ReactiveObjC 3.0.0 bug. when hook NSString dealloc method, NSString can't release. Updated: This is not ReactiveObjC bug. Refer to: https://stackoverflow.com/q/62064040/9315497
int i = 0;
while (YES) {
@autoreleasepool {
NSString *string = [[NSString alloc] initWithFormat:@"%d", i];
// or
// NSString *string = [[NSString alloc] init];
[[string rac_willDeallocSignal] subscribeCompleted:^{
NSLog(@"obj dealloc");
}];
@623637646
623637646 / AspectPositionInstead.m
Last active May 13, 2020 15:01
How to change the return value (for object) with Aspects's AspectPositionInstead. Refer to: https://www.jianshu.com/p/5ba69f35e034
@interface MyObject : NSObject
@property NSString *name;
@end
@implementation MyObject
-(void)dealloc
{
NSLog(@"dealloc");
}
@end
@623637646
623637646 / DoubleFloat+Deprecated.swift
Created September 5, 2019 08:28
Discard + - * / for Double and Float
import Foundation
// Double
func + (leftAddend: Double, rightAddend: Double) -> Double {
fatalError()
}
func - (leftAddend: Double, rightAddend: Double) -> Double {
fatalError()
}
@623637646
623637646 / ThreadNotSafetyTests.m
Last active May 13, 2020 16:49
iOS multiple threads is not safety with nonatomic properties.
#import <XCTest/XCTest.h>
@interface ThreadNotSafetyTests : XCTestCase
// no crash
//@property (atomic) NSObject *obj;
// crash
@property (nonatomic) NSObject *obj;
@end