Blocks的使用

Blocks无论是在Objective-C还是Swift都被大量的应用,尤其是将函数作为一等公民的Swift。今天先分享给大家Blocks的集中语法,以及什么是Blocks;

简介

Blocks是C语言的一种扩展,被称为带自动变量的匿名函数,就是没有函数名的函数,在C语言中这种函数是肯定不允许存在的,但是在C语言中也可以实现,那就是通过函数指针,但是通过函数指针也需要知道函数名是什么,就像这样:

1
2
3
int addNum(int num);
int (*funcptr)(int) = &addNum;
int result = (*funcptr)(10);

但是在Blocks中我们可以使用匿名函数(不带名的函数),这样有什么好处?其实最基本的就是对我们的工作来说,每天做的事情就是在围绕函数名,变量名,属性名,类明…..。因此听起来还是挺好用的。

阅读全文

Objective-C类和对象的实现原理

我是LastDays,我的博客:LastDays.cn

最近一直在了解runtime的实现原理,所以简单的分享一下。

Objective-C的runtime是开源的,但是开始的时候并没有开源NSObject底层的实现,但是后来objc4-532.2发布后,苹果也将NSObject的实现原理加了进来

在这里可以下载Runtime的源码:objc4

阅读全文

iOS 基础知识,你知道几个?(一)

简介:一些iOS基础小知识,对面试有一些帮助,公交车上,地铁上没事翻翻,总结下来的。分享出来

我是LastDays,我的博客:LastDays.cn

(1)Objective-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?

Objective-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。

(2)#import 跟#include 又什么区别,@class呢, #import<> 跟 #import””又什么区别?

import是Objective-C导入头文件的关键字,#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次,不会重复导入,相当于#include和#pragma once;@class告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含;#import<>用来包含系统的头文件,#import””用来包含用户头文件。

(3)属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?

答:1). readwrite 是可读可写特性;需要生成getter方法和setter方法时

2). readonly 是只读特性 只会生成getter方法 不会生成setter方法 ;不希望属性在类外改变

3). assign 是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时;

4). retain 表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1;

5). copy 表示赋值特性,setter方法将传入对象复制一份;需要完全一份新的变量时。

6).nonatomic 非原子操作,决定编译器生成的setter getter是否是原子操作,atomic表示多线程安全,一般使用nonatomi

阅读全文

Objective—C消息发送与转发

我是LastDays一个热爱分享交流的,一个喜欢白菜的90后,LastDays

消息

上一篇文章Objective-C类和对象的实现原理对Objective-C类和对象的实现原理的实现原理进行了总结。我在最开始学习的时候,一直认为[receiver message]仅仅就是一个方法调用,但是后来深入学习以后才明白这是”发送消息”

编译转化

在[receiver message]的执行过程当中,[receiver message]是会被动态编译的,Objc是动态语言,因此它会想尽办法将编译连接推迟到运行时来做。runtime这个时实运行系统就是来执行编译后的代码,编译成什么样runtime才能认识呢?

这里有段代码

1
#import <Foundation/Foundation.h>
#import "Receiver.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
            
        Receiver *receiver = [[Receiver alloc] init];
        [receiver message];
    }
    return 0;
}

阅读全文

Objective-C类和对象的实现原理

我是LastDays,我的博客:LastDays.cn

最近一直在了解runtime的实现原理,所以简单的分享一下。

Objective-C的runtime是开源的,但是开始的时候并没有开源NSObject底层的实现,但是后来objc4-532.2发布后,苹果也将NSObject的实现原理加了进来

在这里可以下载Runtime的源码:objc4

阅读全文

ReactNative开发工具Nuclide搭建

Facebook 于 2015 年 9 月 15 日发布了 React Native for Android 。React Native 让开发者使用 JavaScript 和 React 编写应用,利用相同的核心代码就可以创建 Web,iOS 和 Android 平台的原生应用。
这让很多人开始尝试ReactNative。

分享一个开源的开发工具Nuclide

Nuclide 是 Facebook 专门为 React 开发的 IDE ,既然是官方提供的 IDE ,就意味着拥有更好的语法补全、类型检查等支持。为了开发效率,不妨尝试一下这个 IDE 。

开源地址https://github.com/facebook/nuclide

阅读全文

一步一步搭建自己的iOS网络请求库(一)

大家好,我是LastDay,终于有了自己的博客,在这里分享一个的HTTP请求库的编写经验。

简单的介绍

介绍一下,NSURLSession是iOS7中新的网络接口,它与NSURLConnection是并列的。在程序在前台时,NSURLSession与NSURLConnection可以互为替代工作。两者在前台的时候其实没有什么区别,最主要的是程序在进入后台的时候,Background Session会更加灵活

测试NSURLSession

首先我们来新建一个工程,起名为LyHttp,在页面上放置一个按钮 ,起名为”测试”。

阅读全文

传输层概述

TCP协议特点:面向连接、字节流、可靠传输

面向链接:

1.使用TCP协议的双方必须先建立连接,并且双方都必须分配相应的内核资源。TCP的连接是全双工的,也就是说双方可以根据一个连接进行读写操作。

字节流:

1.当发送方应用多次进行写操作的时候,TCP发送模块会先把数据放在发送缓冲区中,当TCP发送模块真正发送的时候,这些在发送缓冲区中的数据才可能被封装成一个或多个报文段发出。所有根据以上结论,应用程序执行的写操作的次数和TCP发送的报文段个数没有对应的数量关系。

阅读全文

IP协议是TCP协议栈中的核心协议,也是网络编程的基础之一。

网络层概述

IP服务特点:

IP协议为上层协议提供无状态,无连接,不可靠的服务。

  • 无状态:IP通信双方不同步状态传输信息,因此所有IP数据报的发送和接收都是相互独立的,这样也就造成了它无法处理乱序,重复的IP数据报。相对于面向连接而设定的,例如TCP协议,它能够自己处理乱序,重复的报文段。他递交给上层的内容绝对是有序的正确的。但是IP协议的状态也是有优点的,它简单高效,因为我们无需为保证它的状态而分配一些内核数据结构。
  • 无连接:通信双方都不长久的维持对方的任何信息,那么就需要上层协议去指定传输的IP地址。
  • 不可靠服务:不可靠指的是IP协议不能保证IP数据报完整并且准确的到达接收端。因此使用IP的上层协议需要自己做数据确认,超时重传等可靠传输机制。

阅读全文

看了一篇国外的文章,关于iOS9的Core Data教学,在这里做了一下总结

Core Data 教学

示例开源地址:LastDayCoreData

在这篇文章中我们将学习Core Data的系列教程,你将使用Swift2.0写你的Core Data。你将发现在Xcode中它是很容易上手的,从启动代码导师数据模型编辑器。在教程结束后,你会了解到:

  • 使用Xcode的model editor将你想存储在Core Data。
  • 添加新的记录到 Core Data
  • 从Core Data中读取一组数据
  • 在表视图中显示所获取的结果

你也将会了解Core Data背后的数据是什么,以及如何进行交互。OK,现在让我们来构建我的app吧。

阅读全文