Skip to content

Learn Objective-C #269

Open
Open
@yaofly2012

Description

@yaofly2012

如何学习 Objective-C 语言,这方面最好的书有什么?

  1. 在XCode上使用Objective-C写个Hello World
  2. Cocoa Dev Central: Learn Objective-C
  3. TutorialsPoint: Objective-C Tutorial
  4. Apple Dev: Programming with Objective-C

概念

  1. iOS和OS X操作系统
  2. Preprocessor command 什么是Preprocessor ?
  3. 宏(macro)
  4. Block
  5. 指针
  6. 协议(Protocol)
  7. 代理(Delegate)
  8. ARC, pre-ARC

代码组织:

  1. 工程
  2. 项目
  3. 文件
  4. Group
  5. Targets Xcode -Target , PROJECT 区别 - Xcode

基本语法

关键字
作用域
指令
操作符

类型

类型为啥都是NS开头?

  1. Objective-C解疑:为什么是NS、UI开头?
  2. What does the NS prefix mean?

nil

  1. We can also use this(nil) to improve our dealloc method slightly
    为什么会提升?
    对比两种写法,采用nil(方式2)少一些代码,可以更快的coding。

// 方式1
- (void) dealloc
{
    [caption release];
    [photographer release];
    [super dealloc];
}

// 方式2
- (void) dealloc
{
    self.caption = nil;
    self.photographer = nil;
    [super dealloc];
}
  1. This approach is often better for dealloc because there's no chance of the variable pointing at random data where an object used to be.

随机指向一个对象曾经的数据?

Categaies ?

内存管理

函数

Every Objective-C program has one C function, which is main()

除了main函数,不可以定义全局函数,只能作为方法?

多个形参中非首个形参必须添加标签(JoiningArgument)

函数两种调用方式:

  1. call by value: copy value
  2. call by reference: copy address

有点类似全局函数,用法上又如同JS里的闭包。

  1. 可以在全局,也可以在其他函数、方法和Block内部定义Block(即嵌套Block)。
  2. 可以作为变量的值。

数组

  1. fixed-size
  2. sequential: contiguous memory locations
  3. same type

指针

A pointer is a variable whose value is the address of another variable

是变量,所以它用法通其他变量,也有类型和值,不过值是其他变量的内存地址。

指针变量的内存地址大小是一样的。8btye ?

声明方式:

  1. 一般声明方式 type *var-name
  2. 其他特殊场景方式:
  • 数组变量

没有指定初始值的指针变量的值是个随机的地址?

It is always a good practice to assign a NULL value to a pointer variable in case you do not have exact address to be assigned.

指针算术运算

指针变量的值是内存地址,本质是个64位数字。虽然指针的值是个固定大小(8Byte)的数字,但是这个地址的对应的变量值是有大小的。

结构

预处理器

宏(macro) ?

什么是宏

ANSI standard

代码规范

大驼峰方式命名文件。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions