qmui-ios-codesnippets
我 们发现由于 Xcode本身 的 功 能 不足 ,导致我 们经常 在 重 写 一些系统父类方法时容易忘了调用super
,从而出 现一些很难排查的诡异bug。- Xcode 虽然
有 模糊 匹 配 的 代 码提醒,但 代 码提醒只能 帮你写 方法 名 ,而code snippets 还可以帮你填充 一些默认的方法实现,或 者 直接 移 动光标到方法 体内 ,省 去 几次光 标操作 。 - 一些常用的写法本身语法可能比较复杂,难以记忆,
例 如实现一个类的 单例、使用 swizzle
来 重 写 系 统控件 的 方法 、block在 不同 地方 的 语法不同 等 。 - 一些代码本身看似简单,
但 由 于特别常用 ,所以 使用 code snippets可 以大大 节省时间。
Xcode ~/Library/Developer/Xcode/UserData/CodeSnippets
*.codesnippets
为了
cd ~/Library/Developer/Xcode/UserData/CodeSnippets
CodeSnippets
git clone https://github.com/QMUI/QMUI_iOS_CodeSnippets.git ./
CodeSnippets
git init .
git remote add origin https://github.com/QMUI/QMUI_iOS_CodeSnippets.git
git pull origin master
其中以 QM_
QMUI_
QMUI for iOS
NSObject
pa
-定 义一个assign
的 propertypar
-定 义一个assign, readonly
的 propertypc
-定 义一个copy
的 propertypcr
-定 义一个copy, readonly
的 propertyps
-定 义一个strong
的 propertypsr
-定 义一个strong, readonly
的 propertypw
-定 义一个weak
的 propertypwr
-定 义一个weak, readonly
的 propertyload_once
- 创建一 个带dispatch_once
的 +load
方法 propertySwizzleAssign
-用 swizzle
的 方式 定 义一个assign
的 propertypropertySwizzleCopy
-用 swizzle
的 方式 定 义一个copy
的 propertypropertySwizzleStrong
-用 swizzle
的 方式 定 义一个strong
的 propertypropertySwizzleWeak
-用 swizzle
的 方式 定 义一个weak
的 propertysharedInstance
- 为当前 类创建 一个实现单例功能的sharedInstance
方法 exchangeImplementation
-重 写 当 前 类的load
方法 并在其中用 swizzle
替 换方法 实现exchangeImplementation_QMUI
-用 QMUI重 写 当 前 类的load
方法 并用ExchangeImplementations()
函数 替 换方法的 实现exchangeMultipleImplementations_QMUI
-用 QMUI重 写 当 前 类的load
方法 并用ExchangeImplementations()
函数 批量替 换多个方法的 实现override_void_non_argv
-用 QMUI的 OverrideImplementation()
重 写 指定 class的 某 个无返 回 值、无参数 的 方法 实现override_void_single_argv
-用 QMUI的 OverrideImplementation()
修 改 指定 class的 某 个无返 回 值、带一个参数的方法实现override_void_two_argvs
-用 QMUI的 OverrideImplementation()
修 改 指定 class的 某 个无返 回 值、带两个参数 的 方法 实现override_return_non_argv
-用 QMUI的 OverrideImplementation()
修 改 指定 class的 某 个带返 回 值、无参数 的 方法 实现override_return_single_argv
-用 QMUI的 OverrideImplementation()
修 改 指定 class的 某 个带返 回 值、带一个参数的方法实现override_return_two_argvs
-用 QMUI的 OverrideImplementation()
修 改 指定 class的 某 个带返 回 值、带两个参数 的 方法 实现extend_void_non_argv
-用 QMUI的 ExtendImplementationOfVoidMethodWithoutArguments()
修 改 指定 class的 某 个无返 回 值、无参数 的 方法 实现extend_void_single_argv
-用 QMUI的 ExtendImplementationOfVoidMethodWithSingleArgument()
修 改 指定 class的 某 个无返 回 值、带一个参数的方法实现extend_void_two_argvs
-用 QMUI的 ExtendImplementationOfVoidMethodWithTwoArguments()
修 改 指定 class的 某 个无返 回 值、带两个参数 的 方法 实现extend_return_non_argv
-用 QMUI的 ExtendImplementationOfNonVoidMethodWithoutArguments()
修 改 指定 class的 某 个带返 回 值、无参数 的 方法 实现extend_return_single_argv
-用 QMUI的 ExtendImplementationOfNonVoidMethodWithSingleArgument()
修 改 指定 class的 某 个带返 回 值、带一个参数的方法实现extend_return_two_argvs
-用 QMUI的 ExtendImplementationOfNonVoidMethodWithTwoArguments()
修 改 指定 class的 某 个带返 回 值、带两个参数 的 方法 实现
Block
blockParameterInMethod
-声明 一 个用于 OC方法 参 数 的 blockblockParameterInFunction
-声明 一 个用于 C函数 参 数 的 blockblockproperty
-声明 一 个用于 property的 blockblocktypedef
-用 typedef
定 义一个 blockblockvar
-定 义一个作为局部变量的 block
Method & Function
fnv
-定 义一个返回值为void
的 方法 fnv:
-定 义一个返回值为void
且带参 数 的 方法 fnblock
-定 义一个返回值类型为 block的 方法 fnv_handleEvent
-定 义一个用于UIControl
事件 回 调的方法 fnv_longPress
-定 义一个用于UILongPressGestureRecognizer
的 回 调方法 (你就不用 每次 都 去 拼写那 个很长的手 势名字 了 )fnv_pan
-定 义一个用于UIPanGestureRecognizer
的 回 调方法 fnv_tap
-定 义一个用于UITapGestureRecognizer
的 回 调方法
UIView
setFrame
- 为UIView
设置frame
setFrame_QMUI
- QMUI使用 像 素 对齐的 CGRectFlatMake()
为UIView
设置frame
setFrameX
- QMUI使用 CGRectSetX()
修 改 UIView
的 frame.origin.x
setFrameY
- QMUI使用 CGRectSetY()
修 改 UIView
的 frame.origin.y
setFrameXY
- QMUI使用 CGRectSetXY()
修 改 UIView
的 frame.origin
sizeThatFits
- 为当前 view 创建sizeThatFits:
方法 layoutSubviews
-展 开layoutSubviews
方法 updateConstraints
-展 开updateConstraints
方法 getWidth
-展 开CGRectGetWidth()
getHeight
-展 开CGRectGetHeight()
getMinX
-展 开CGRectGetMinX()
getMinY
-展 开CGRectGetMinY()
addtarget
- 调用UIControl addTarget:action:forEvents:
方法 setImageForButton
- 为UIButton
设置图片setTitleColorForButton
- 为UIButton
设置文字 颜色setTitleForButton
- 为UIButton
设置文字
UITableView
initWithStyle
-展 开initWithStyle:
方法 initWithStyleForCell
-展 开UITableViewCell initWithStyle:reuseIdentifier:
方法 tableViewDelegate
-展 开常用 的 几个UITableViewDelegate
方法 numberOfSectionsInTableView
-展 开numberOfSectionsInTableView:
方法 numberOfRowsInSection
-展 开tableView:numberOfRowsInSection:
方法 cellForRowAtIndexPath
-展 开tableView:cellForRowAtIndexPath:
方法 heightForRowAtIndexPath
-展 开tableView:heightForRowAtIndexPath:
方法 didSelectRowAtIndexPath
-展 开tableView:didSelectRowAtIndexPath:
方法
UICollectionView
collectionViewDelegate
-展 开常用 的 几个UICollectionViewDelegate
方法 numberOfSectionsInCollectionView
-展 开numberOfSectionsInCollectionView:
numberOfItemsInSection
-展 开collectionView:numberOfItemsInSection:
cellForItemAtIndexPath
-展 开collectionView:cellForItemAtIndexPath:
sizeForItemAtIndexPath
-展 开collectionView:layout:sizeForItemAtIndexPath:
方法 didSelectItemAtIndexPath
-展 开collectionView:didSelectItemAtIndexPath:
方法 didDeselectItemAtIndexPath
-展 开collectionView:didDeselectItemAtIndexPath:
方法
UIViewController
initWithNib
-展 开initWithNibName:bundle:
方法 didInitialize
-展 开某些 QMUI控 件 提供 的 didInitialize
方法 didInitializeWithStyle
-展 开 QMUICommonTableViewController的 didInitializeWithStyle:
方法 loadView
-展 开loadView
方法 viewDidLoad
-展 开viewDidLoad
方法 viewWillAppear
-展 开viewWillAppear:
方法 viewDidAppear
-展 开viewDidAppear:
方法 viewWillDisappear
-展 开viewWillDisappear:
方法 viewDidDisappear
-展 开viewDidDisappear:
方法 viewDidLayoutSubviews
-展 开viewDidLayoutSubviews:
方法 updateViewConstraints
-展 开updateViewConstraints:
方法 addChildViewController
-在 当 前 UIViewController
里 添加 childViewController
removeFromParentViewController
-将 childViewController
从当前 的 UIViewController
里 移 除 initSubviews
- QMUI展 开initSubviews
方法 setupNavigationItems
- QMUI重 写 QMUICommonViewController
里 的 setupNavigationItems
方法 setupToolbarItems
- QMUI重 写 QMUICommonViewController
里 的 setupToolbarItems
方法
UIBarButtonItem
backItem
-用 QMUI方法 生成 一个返回按钮boldTitleItem
-用 QMUI方法 生成 一个文字加粗的导航栏按钮closeItem
-用 QMUI方法 生成 一个导航栏上的关闭图标按钮imageItem
-用 QMUI方法 生成 一个导航栏上的图片按钮titleItem
-用 QMUI方法 生成 一个导航栏上的文字按钮
Other
pragma
-展 开一个用于 Xcode 导航的 #pragma mark -
宏 log
-展 开NSLog(@"xxx")
osif
-展 开一个 @available(iOS xxx, *)的 if判断 externRefInH
-在 *.h
文 件 里 声明 一 个extern const
的 指 针externRefInM
-在 *.m
文 件 里 为一个extern const
的 指 针赋值externValueInH
-在 *.h
文 件 里 声明 一 个extern const
的 值变量 externValueInM
-在 *.m
文 件 里 为一个extern const
的 变量赋值static reference
-定 义一个static
的 指 针static
-定 义一个static
的 值变量 __weakSelf
-定 义一个weak
的 self
指 针__strongSelf
-将 weakSelf
指 针改为strong
的 self
指 针logCallStackSymbols
-用 NSLog
打出 当 前 的 方法 调用栈信息 timeConsuming
-展 开一 段 用 CACurrentMediaTime()
来 计算方法 耗时的 代 码