RuntimeSummary - 一个集合了常用 Runtime 使用方法的 Playground

RuntimeSummary

https://github.com/Tuccuay/RuntimeSummary

RuntimeSummary

一个集合了常用 Objective-C Runtime 使用方法的 Playground

目录

如何使用这个 Playground

Screenshot

先选择 Scheme,然后 Run!

消息机制介绍 / Messaging

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 创建一个对象
// Cat *harlan = [[Cat alloc] init];

// 使用 Runtime 创建一个对象
// 根据类名获取到类
Class catClass = objc_getClass("Cat");

// 同过类创建实例对象
// 如果这里报错,请将 Build Setting -> Enable Strict Checking of objc_msgSend Calls 改为 NO
Cat *harlan = objc_msgSend(catClass, @selector(alloc));

// 初始化对象
// harlan = [harlan init];

// 通过 Runtime 初始化对象
harlan = objc_msgSend(harlan, @selector(init));

// 调用对象方法
// [harlan eat];

// 通过 Runtime 调用对象方法
// 调用的这个方法没有声明只有实现所以这里会有警告
// 但是发送消息的时候会从方法列表里寻找方法
// 所以这个能够成功执行
objc_msgSend(harlan, @selector(eat));

// 输出: 2016-04-21 21:10:20.733 Messaging[20696:1825249] burbur~

// 当然,objc_msgSend 可以传递参数
Cat *alex = objc_msgSend(objc_msgSend(objc_getClass("Cat"), sel_registerName("alloc")), sel_registerName("init"));
objc_msgSend(alex, @selector(run:), 10);

阅读全文

SJ53 - Note for Study Jams 2A. Making an App Interactive - 上

这是参加 Google Study Jams 活动的学习笔记
中国区为 Google Developers Study Jams China
本篇笔记对应的课程内容为 2A. Making an App Interactive - 上
感谢 谷创字幕组 (前 GDG 字幕组)为课程提供中文字幕
笔记发布在 SJ53 - Note for Study Jams 2A. Making an App Interactive - 上
按照课程要求,本文同时发布在 [课程笔记] SJ53 - Note for Study Jams 2A. Making an App Interactive - 上 by Tuccuay

2A - 1 - Introduction to Lesson 2

所以,要开始学 Java 了。

2A - 2 - Create a New Project

创建一个新的项目并明明为 Just Java,空的项目,就像以前一样,运行一下,确保以前正常。

2A - 3 - Create a New Project - Solution(skip)

2A - 4 - Plan How to Build the Layout

按要求实现图示的界面,看起挺简单,于是就从 RelativeLayout 改成了 LinearLayout,添加两个 TextView 和一个 Button,第一个 TextViewandroid:textAllCaps="true" 让他全部大写,第二个 TextViewandroid:textSize="24sp" 加大字体。

2A - 5 - Plan How to Build Layout - Solution(skip)

2A - 6 - Build Layout

为了在接下来能够使用代码修改要购买的数量,需要给那个 TextView 加上 @id,即 @+id/quantity_text_view

阅读全文

SJ53 - Note for Study Jams PS1. 动手实践课1+咖啡问答

这是参加 Google Study Jams 活动的学习笔记
中国区为 Google Developers Study Jams China
本篇笔记对应的课程内容为 PS1. 动手实践课1+咖啡问答
感谢 谷创字幕组 (前 GDG 字幕组)为课程提供中文字幕
笔记发布在 SJ53 - Note for Study Jams PS1. 动手实践课1+咖啡问答
按照课程要求,本文同时发布在 [课程笔记] SJ53 - Note for Study Jams PS1. 动手实践课1+咖啡问答 by Tuccuay

PS1 - 1 - Welcome to Practice Set One

Let’s use Android Studio!

PS1 - 2 - The Installation Process

oh,安装 JDK(Java Development Kit),很好,OS X 自带了这个,下一步。
安装 Android Studio,拖进去就好了,感谢 JetBrains。

PS1 - 3 - Troubleshooting

如果遇到问题?Google it!

PS1 - 4 - Install Android Studio

Excuse me? 「点击你要的操作系统」? Udacity 搬过来的课程也是够了…
oh,接下来分别是在 Windows 和 OS X 上安装 Android Studio(众 Linux 用户感受到了莫名的…

阅读全文

SJ53 - Note for Study Jams 1B. Building Layouts Last

这是参加 Google Study Jams 活动的学习笔记
中国区为 Google Developers Study Jams China
本篇笔记对应的课程内容为 1B. Building Layouts - 下
感谢 谷创字幕组 (前 GDG 字幕组)为课程提供中文字幕
笔记发布在 SJ53 - Note for Study Jams 1B. Building Layouts Last
按照课程要求,本文同时发布在 [课程笔记] SJ53 - Note for Study Jams 1B. Building Layouts Last by Tuccuay

1B - 1 - View Groups

一个 XML 中只能包含一个根 View,其它的 View 应该放在 ViewGroup

  • LinearLayout
  • RelativeLayout

小练习:

  1. 图中有 4 个 View
  2. image 是 ViewGroup 的 child
  3. ViewGroup 是 Hiking 的 parent
  4. 一共有 4 个 View

1B - 2 - View Groups - Solution(skip)

1B - 3 - Types of ViewGroups

  • LinearLayout
    让子视图依次排列在一条直线上
  • RelativeLayout
    让子视图相对于其它视图排列

    阅读全文

SJ53 - Note for Study Jams 1A. Building Layouts First

这是参加 Google Study Jams 活动的学习笔记
中国区为 Google Developers Study Jams China
本篇笔记对应的课程内容为 1A. Building Layouts - 上
感谢 谷创字幕组 (前 GDG 字幕组)为课程提供中文字幕
笔记发布在 SJ53 - Note for Study Jams 1A. Building Layouts First
按照课程要求,本文同时发布在 [课程笔记] SJ53 - Note for Study Jams 1A. Building Layouts First by Tuccuay

1A - 1 - Introduction

课程时间总共将会有 20~25h,可能会在 4~5week 完成。

1A - 2 - Learning Something New

分享,你遇到的难题。

1A - 3 - Intro to the App Lesson Map

接下来将学习 View

  • 选择一个 View
  • 改变它的样式/状态
  • 将它合适的展示在屏幕上

    阅读全文

在 iOS 上开始创建你的虚拟现实应用

以前 Cardboard 也是支持在 iOS 上使用的,依靠 Unity 来实现,所以你需要用 C# 来编写 iOS app(听起来很奇怪对不对?) 而今天在 GDG China 看见 全新 VR 视图:让你的应用和网站嵌入沉浸式内容 当然迫不及待的想尝试一下,于是翻译了最新的文档,大家一起来体验一下在 iOS 上实现虚拟现实的新方式吧。

Cardboard 是 Google 一款能够很方便让你的手机变身 VR 设备的产品,如果你还没有拥有它,可以去某宝买一个 ;)

这个 Cardboard SDK 可以让你很方便的控制音频的空间感(例如左右声道),也可以控制响度,所以你可以让一段对话在一个小飞船中或者一个很大的地下洞穴中表现得很不一样。

在这个示例程序中我们完成了一个寻宝游戏,他演示了 Cardboard 的核心功能。玩家将会在一个虚拟的世界中寻找宝物。你将会学习如何使用光照、空间运动和着色等基本功能如果玩家看见了他要找的东西,将会触发空间音效和视差效果。

基本要求

为了能够运行这个示例程序,你至少需要满足以下条件:

  • Xcode 7.1 或更高版本
  • CocoaPods, 访问 CocoaPods 来安装。
  • 一部运行 iOS 7.0 或更高版本的 iPhone。

阅读全文

<Error>: CGContextDrawImage: invalid context 0x0.

1
2
Feb 26 13:46:50  ProjectName[48427] <Error>: CGContextDrawImage: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Feb 26 13:46:50 ProjectName[48427] <Error>: CGBitmapContextCreateImage: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.

Google 半天毫无头绪,少量的结果将问题指向 iOS9 的适配,以及部分引用 Apple Developer Fourm 的问题说明这是 Xcode 的一个 bug。

然而…踩坑什么的最讨厌了,肯定不是,我再看看…

Interface Builder - error cell
在某个 .xib 里面发现本该是 UICollectionViewCell 被我拖了一个 UIView 进去,遂换成 UICollectionViewCell 再试,错误依旧….

阅读全文

Pro Git 2 阅读笔记

原书地址: http://git-scm.com/book/zh/v2

初始化一个 repo

1
2
3
4
git init // 将在目录下创建 .git
git add . // 添加目录下所有文件到 git 暂存区(Staging Area)
// 不要忘记 LICENSE 和 README.md
git commit -m "init a project" // 提交到本地 repo

克隆一个仓库 git clone

1
2
git clone https://example.com/username/repo
git clone https://example.com/username/repo rename // 将以 "rename" 存储

查看当前状态 git status

1
git status
  • Untracked 未跟踪的数据:文件在文件夹中,但不在仓库中
    • 是新增文件,将显示 new file: file.name 使用 git add 来添加它
    • 已经从 repo 中 git remove
  • Unmodified 未更改:一起都和看上去的一样
  • Modified 已更改:文件发生了变化
    • 将显示 modified: file.name 需要 git add 来暂存更改
  • Staged 已暂存:改动已经存储到暂存区

    阅读全文

计蒜客 CS113 Python 程序设计

A+B+C 问题

这是一个非常简单的题目,意在考察你编程的基础能力。千万别想难了哦。输入为三行,每行一个整数,分别为 A、B、C(数据范围均在 -40 ~ 40 之间)。输出为一行,为“A+B+C”的计算结果。

1
2
3
4
5
input_list = raw_input().split(' ')
sum = 0
for input_number in input_list:
sum = sum+int(i)
print sum

批量替换字符串

在网络编程中,如果 URL 中含有特殊字符,如空格、“#”等,服务器将无法识别导致无法获得正确的参数值,我们需要将这些特殊字符转换成服务器可以识别的字符,例如将空格转换成“%20”。给定一个字符串,将其中的空格转换成“%20”。
输入一个原始字符串,例如 hello world
输出转换后的字符串,例如 ` hello%20world

1
2
3
source_str = raw_input()
source_str = source_str.replace(' ', '%20')
print source_str

阅读全文