Jan 27

【Lrdcq的iOS入门 DAY0】OC基础

Lrdcq , 2016/01/27 21:09 , 教程 , 閱讀(1409) , Via 本站原創
Attention:本教程,不,其实是我学习review笔记,主要目的是我自己将我近一个月以来学习ios的姿势与方式用循序渐进的方式重新整理与归纳,并总结为阶梯性的知识点。教程意义不大,多半是给自己看的,所以看到我胡扯乱弹琴或者老是忘事儿请不要太在意。
本教程所有第0章节都是废话,有基础者可以跳过的,请务必注意。


认识oc - 写一个oc类 - 基础的oc内部类 - 协议与代理 - 简单的内存管理



step0.认识oc

oc是一门与我们熟识的js,java,python,c完全不同的语言。不对!首先我们知道的oc以c为基础的一门消息类动态语言,所以:

1.它是无缝兼容c的,也就是说我们可以面向对象的编写一切,同时在需要的时候,也能退回到面向过程的写法(oc核心库当然均为c函数),这为我们编写代码带来了极大的方面。

2.它的方法调用均为消息的形式发出,方法体实际可以理解为消息的订阅者。那么到底有没有订阅者收到消息很多情况下程序并不是那么关心。这种机制可以避免程序崩溃,简化很多错误判断逻辑。

3.它是一门真正的动态语言,不像java的面向对象需要非常严谨的继承,公有私有使用,在oc中我们甚至可以做到替换掉ios的sdk方法,这为我们编写代码带来了极大的方面。

4.还有一点值得一提的是,拆开了看,oc就是一个c语言的语法糖,oc编译的实质是把oc转换为c语言再用c编译器进行编译。那么,我们就很容易了解到一个看起来高大上的oc特性在c语言层面到底是怎样实现的,深刻理解oc的运作原理,并且可以针对c实现进行代码优化和改进。

那么,这些特点一句话就是,oc非常灵活,方便。好!

step1.写一个oc类

和传统的c/cpp系列语言一样,我们写一个类习惯在一个.h文件中写好接口(@interface)并且在.m中完成实现代码(@implementation)。当然,灵活性超级强的oc其实可以把这两样都塞到一个m文件中,就当它是内部类吧(其实还是有方法访问的)。

一个很普通的接口看起来是这样的:

@interface MyClass : NSObject

@property(strong, nonatomic,readonly) UILabel *oc_object;
@property(strong, nonatomic) NSString *oc_string;
@property(assign, nonatomic) int c_number;
@property(assign, nonatomic) NSInteger number;

- (void) method;
- (NSString*) methodWithArg:(NSInteger) number;
+ (NSString*) methodWithArg:(NSInteger) number1 andArg:(NSInteger) number2;

@end

好吧,事实上一点也不普通,我们来看看都有些啥:

首先,我们定义了myclass,继承自NSObject,oc中所有的类都应该继承自这个东西。这一行后面还可以用<>包起来这个类需要实现的协议(@protocol)(协议这个概念类似于java中的interface,下文中讲解)。接下来是4个实例