0%

  • 通过使用范畴(category,范畴、分类),可以为任何已有的类添加方法。
  • ⚠️ 建议使用带有前缀(bnr_)的方法:实现了使用范畴的方法时,如果在类中已经存在名称相同的另一个方法,这个使用了范畴的方法就会替换掉之前存在的方法。
  • 应该使用范畴来给已存在的类增加新方法,而不要在范畴中替换已经存在的方法:这种情况下应该创建该类的子类。

示例:

NSDate 类添加一个创建日期的类方法:

image

阅读全文 »

init

NSObject 类有一个名为 init 的方法。init 的示例代码如下:

NSMutableArray *mutableArray = [[NSMutableArray alloc] init];

向新创建的对象发送 init 消息,它就会初始化其下的示例变量。

  • alloc 负责分配对象空间, init 负责初始化对象。
  • 如果创建出来的新对象没有经过初始化,它会存在于内存里,但是无法接收消息。
  • init 是实例方法,返回的是初始化后的对象地址。
  • initNSObject 的初始化方法。
  • 如果 NSObject 的子类没有实现 init 方法,就会默认执行 NSObjectinit 方法,将实例变量初始化为 0。
阅读全文 »

Block 对象

Block 对象是一段代码。先给出一个 Block 对象的示例:

^{
  NSLog(@"This is an instruction within a block.")
}
  • ^ 表示这段代码是一个 Block 对象。
  • 看上去和 C 函数类似,但是它没有函数名。

Block 对象也可以有实参和返回值:

^(double dividend,double divisor) {
  double quotient = dividend / divisor
  return quotient;
}
  • 这段代码中的 Block 对象有两个 double 类型的实参,一个 double 类型的返回值。
  • Block 对象可以被当成一个实参来传递给可以接收 block 的方法。
阅读全文 »

回调

  • 回调(callback) 就是将一段可执行的代码和一个特定的事件绑定起来。当特定的事件发生时,就会执行这段代码。

实现回调的四种途径

  • 目标 — 动作对(target-action):在程序开始等待前,要求 “当事件发生时,向指定的对象发送某个特定的消息”。这里接收消息的对象是目标(target),消息的选择器(selector)是动作(action)。
  • 辅助对象(helper objects):程序开始等待前,要求 “当事件发生时,向遵守相应协议的辅助对象发送消息”。委托对象(delegate)和数据源(data source)是常见的辅助对象。
  • 通知(notification):苹果公司提供了一种称为通知中心(notification center)的对象。在程序开始等待前,可以告知通知中心 “某个对象正在等待某些特定的通知”。当事件发生时,相关的对象会向通知中心发布通知,然后再由通知中心将通知转发给正在等待该通知的对象。
  • Block 对象(Blocks)Block 是一段可执行的代码。在程序开始等待前,声明一个 Block 对象,当事件发生时,执行这段 Block 对象。
阅读全文 »

WKWebView API

WKWebView 对象可以显示交互式 Web 内容,例如应用内浏览器。你可以使用 WKWebView 类将 Web 内容嵌入到你的应用程序中。 为此,创建一个 WKWebView 对象,像设置视图一样设置它,并向其发送加载 Web 内容的请求。

预览

重要

从 iOS 8.0 和 OS X 10.10 开始,在你的 APP 中使用 WKWebView 添加网页内容,不要使用 UIWebViewWebView

使用 initWithFrame:configuration: 方法创建了一个新的 WKWebView 对象之后,你需要加载 web 内容。使用 loadHTMLString:baseURL: 方法加载本地 HTML 文件或者使用 loadRequest: 方法开始加载 web 内容。使用 stopLoading 方法停止加载,并且使用 loading 属性查看 web 视图是否正在加载中。为对象设置委托属性以遵守 WKUIDelegate 协议,以跟踪 Web 内容的加载。

要允许用户在 web 历史页面中前进或者后退,为按钮设置使用 goBackgoForward 方法的动作。当用户不能在某个方向上再移动时,使用 canGoBackcanGoForward 属性禁用按钮。

默认情况下,web 视图会自动将出现在 web 内容中的电话号码转换为电话链接。当电话链接被点击时,电话应用程序就会启动并拨打该号码。要关闭这个默认的行为,用 WKDataDetectorTypes 设置 dataDetectorTypes 属性以不包含 WKDataDetectorTypePhoneNumber 标志。

你还可以使用 setMagnification:centeredAtPoint: 以编程方式设置 Web 内容第一次在 Web 视图中显示的缩放比例。 此后,用户可以使用手势来改变比例。

阅读全文 »

  • GitHub 地址BEMCheckBox
  • star:1800+

                            ​    ⭐️⭐️⭐️ 
          以下内容来源于官方源码、 README 文档、测试 Demo或个人使用总结 !

BEMCheckBox 和普通的 UI 控件用起来相差无几,本文我是对官方 Read.me 的翻译。

阅读全文 »

  • GitHub 地址:JVFloatLabeledTextField
  • star:6000+
                            ⭐️⭐️⭐️ 

以下内容来源于官方源码、 README 文档、测试 Demo 或个人使用总结 !

JVFloatLabeledTextField 是已经被称为 “浮动标签模式” 的 UX 模式的第一实现。

由于移动设备的空间限制,通常只依靠占位符作为标记字段的手段。 这就会产生 UX 问题,因为一旦用户开始填写表单,就不会出现占位符标签。

这个包含 UITextFieldUITextView 子类的 UI 组件库旨在通过将占位符转换为悬停在浮动标签之上的浮动标签来改善用户体验。

可以有效解决移动设备上进行表单输入时,无法边看表单提示边进行输入的困境。

阅读全文 »

应用沙盒机制

每个 iOS 应用都有自己专属的应用沙盒(sandbox)。应用沙盒就是文件系统中的目录,但是 iOS 系统会将每个应用的沙盒目录与文件系统的其他部分隔离。应用只能访问各自的沙盒。

应用沙盒目录

应用沙盒目录

阅读全文 »

常量

  • 程序中的某些信息的值是永远不会变的,这类不变的值称为 常量
  • 在 Objective-C 中,可以通过两种途径来定义 常量
    1. 全局变量
    2. #define 预处理程序
  • 常量应该以驼峰法命名,并以相关类名作为前缀。

    若常量仅局限于 ** 实现文件 (.m)** 之内,则在前面加字母 K;
    若常量在类之外可见,则通常以类名为前缀。

    static const NSTimeInterval ZOCSignInViewControllerFadeOutAnimationDuration = 0.4;
    static NSString * const ZOCCacheControllerDidClearCacheNotification = @"ZOCCacheControllerDidClearCacheNotification";
    static const CGFloat ZOCImageThumbnailHeight = 50.0f;
  • 常量应该在头文件中以这样的形式暴露给外部:
    <!–hexoPostRenderEscape:
    extern NSString *const ZOCCacheControllerDidClearCacheNotification;

// 示例
// .h
UIKIT_EXTERN NSString *const HQFormRowDescriptorTypeProvinceAndCity;
UIKIT_EXTERN const CGFloat HQLTableViewCellHeight;
// .m
NSString *const HQFormRowDescriptorTypeProvinceAndCity = @"HQProvinceAndCityCell";
const CGFloat HQLTableViewCellHeight = 115;
:hexoPostRenderEscape–>
并在实现文件中为它赋值。
只有公有的常量才需要添加命名空间作为前缀。尽管实现文件中私有常量的命名可以遵循另外一种模式,你仍旧可以遵循这个规则。

阅读全文 »