EmptyWalker

黑夜给了我黑色的眼睛,我却用它寻找光明

欢迎来到空行者小站


Aspects


layout: post title: Aspect date: 2018-07-24 10:26:24.000000000 +09:00 —

为何Aspects在定义ErrorLog宏的时候采用while(0)的循环

#define AspectLogError(...) do { NSLog(__VA_ARGS__); }while(0)

#define AspectError(errorCode, errorDescription) do { \
AspectLogError(@"Aspects: %@", errorDescription); \
if (error) { *error = [NSError errorWithDomain:AspectErrorDomain code:errorCode userInfo:@{NSLocalizedDescriptionKey: errorDescription}]; }}while(0)

A: 使用 do-while 保证 Log 只被执行一次

@property 和 @dynamic

如果对@property声明的属性name,在implementation方法中使用@dynamic name,想要保证运行时不出错,则需要自己从新声明一个成员变量和setter/getter方法。原因:

@dynamic 的语义是告诉编译器,用户会自己实现setter/getter方法和创建成员变量,如果用户不实现setter/getter方法,使用了该属性,代码能够通过编译,但会在运行时报错,无法找到对应的setter/getter方法

最近的文章

「译」Core ML 介绍:构建一个简单的图片识别 APP

本文是翻译于AppCoda社区,如有版权问题,请告知,会配合处理 原文地址在 WWDC 2017, Apple 发布了很多令人兴奋的框架和 APIs 供开发者使用。在所有的新框架中,最受欢迎的无疑是 Core ML。 Core ML 是一个可以利用它将机器学习模型集成到应用程序中的框架。Core ML 最棒的地方在于,你不需要对神经网络和机器学习有有广泛的了解;Core ML 的另一个特性是,只要你能将其转换成 Core ML 模型,你就可以使用预先训练好的数据模型。为了演示目的,我...…

继续阅读
更早的文章

Design

记录寻找设计素材的来源发现一个很好的设计素材网站 uplabs.com 需要翻墙…

继续阅读