OC学习之进阶

1.内存管理

? ? ? ? 概念,当alloc出一个对象,其构成为 对象自身+retainCount ,这个retainCount是对象计数器 。判断对象要不要回收的唯一依据(存在一种例外:对象值为nil时,引用计数为0,但不回收 空间)就是计数器是否为0,若不为0则存在。对象被销毁前会给系统发送dealloc,当然可以重写此函数。dealloc不能直接调用,如果意见被回收过的对象再次使用会报野指针(Zombie)。在diagnostics中可以开启Zombie监测。

? ? ? ? Objective-C??供了三种内存管理方式:MannulReference Counting(MRC,手动管理,在开发 iOS4.1之前的版本的项目时我们要 自己负责使用引用计数来管理内存,比如要手动 retain、release、autorelease 等,而在其后 的版本可以使用 ARC,让系统自己管理内存。) automatic reference counting(ARC,自动引用计数,iOS4.1 之后推出的) garbage collection(垃圾回收)。iOS不支持垃圾回收; ARC作为苹果新??供的技术,苹果推荐开发者使用ARC技术来管理内存;

? ? ? ? 想要手动调用retain,release必须关闭ARC . 在build setting中可以设置。

? ? ? ??

? ? ? ? 官方强烈建议不需要手动托管资源计数与释放,那便略过。ARC不是垃圾回收,是编译器特性不是运行时特性。ARC判定是否回收的规则,至少有一个强指针指向对象就不会执行回收。

?

2.Category 和 C#exten class差不多,都是在不更改当前类的前提下,新增类扩展当前类的api 。

3.神奇的block,apple推荐使用的数据类型。使用场景广泛,用来保存一段代码恰当的时机调用。

[email protected] 协议,这东西与C#的abstract保持一致,其实没什么好说的。其中有两个关键字 @required 必须实现此方法; @optional 可以选择不实现;众所周知接口可以多继承oc也不例外。

5.代码 暂时就那么多吧,后面再接着写

#import <Foundation/Foundation.h>

?

//声明一个协议也就是c#中的接口

@protocol IprototolTest

?

@required -(void)ShowTxt :(NSString*) str;

@optional -(void)ShowTxtNoParams;

?

@end

?

@interface TestClass:NSObject <IprototolTest>

{

? ? @public

? ? int name;

}

-(void) PrintName:(NSString*) name;

?

@end

?

?

@implementation TestClass

?

-(void)PrintName:(NSString *)name

{

? ? NSLog(name);

}

?

-(void)ShowTxt:(NSString *)str

{

? ? NSLog(str);

}

?

@end

?

@interface TestClass (testCategory)

-(void)SayHello;

@end

@implementation TestClass(testCategory)

?

-(void)SayHello

{

? ? NSLog(@"helloworld");

}

?

@end

?

?

?

void (^testBlockMethod)(int, NSString*) = ^ (int x, NSString* y)

{

? ? NSLog(@"%d +++++ %@", x , y);

};

?

int main(int argc, const char * argv[]) {

? ? @autoreleasepool {

? ? ? ? TestClass *s = [[TestClass alloc] init];

? ? ? ? [s SayHello];

?? ? ? ?

? ? ? ? testBlockMethod(1001,@"testBlock ...");

?? ? ? ?

? ? }

? ? return 0;

}

时间: 2024-10-13 11:00:26

OC学习之进阶的相关文章

OC学习篇之---总结和学习目录

今天终于把OC的基础知识学习完了,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.下面就是这次学习OC的目录教程,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请OC老鸟来喷~~ 1.OC学习篇之---概述 2.OC学习篇之---第一个程序HelloWorld 3.OC学习篇之---类的定义 4.OC学习篇之---类的初始化方法和点语法的使用 5.OC学习篇之---类的三大特性(封装,继承,多态) 6.OC学习篇之[email protected]关键

IOS开发-OC学习-常用功能代码片段整理

IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是在做与URL有关的功能时,需要在Info.plist中添加一段代码进而实现让网址完成从Http到Https的转换,以及其他的一些功能. 在从一个新手到逐渐学会各种功能.代码.控件.方法如何使用的过程中,也在逐渐积累一些知识,但是一次总不会把这些东西都深刻记住并完全理解.所以在这儿记录下这些东西,用来

OC学习篇之---单例模式

在之前的一片文章中介绍了对象的拷贝相关知识:http://blog.csdn.net/jiangwei0910410003/article/details/41926531,今天我们来看一下OC中的单例模式,单例模式在设计模式中用的可能是最多的一种了,而且也是最简单的一种 实现单例模式有三个条件 1.类的构造方法是私有的 2.类提供一个类方法用于产生对象 3.类中有一个私有的自己对象 针对于这三个条件,OC中都是可以做到的 1.类的构造方法是私有的 我们只需要重写allocWithZone方法,

Vue学习笔记进阶篇——Render函数

本文为转载,原文:Vue学习笔记进阶篇--Render函数 基础 Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编程的能力,这就是 render 函数,它比 template 更接近编译器. <h1> <a name="hello-world" href="#hello-world"> Hello world! </a> </h1>

黑马程序员-OC学习笔记之Foundation框架NSNumber、NSValue和NSDate

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.NSNumber 前几篇笔记中,小桥复习了Foundatio框架中的几个类,这三个是OC学习的尾声了. 小桥已经复习过OC数组类NSArray,也说过它只能存放OC的对象,对于基本的数据类型确无能为力,但是实际编程中经常要把基本的数据如int.float,结构体存放的OC数组中,怎么办?这里的NSNumber就有用了,它能够把基本数据类型包装成OC对象.

黑马程序员-OC学习笔记之block

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9426    Accepted Submission(s): 4151 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做par

Android学习笔记进阶16之BitmapShader

<1>简介 具体的看一下博文:Android学习笔记进阶15之Shader渲染 public   BitmapShader(Bitmap bitmap,Shader.TileMode tileX,Shader.TileMode tileY) 调用这个方法来产生一个画有一个位图的渲染器(Shader). bitmap   在渲染器内使用的位图 tileX      The tiling mode for x to draw the bitmap in.   在位图上X方向花砖模式 tileY  

Python学习笔记进阶篇——总览

Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(Socket编程进阶&多线程.多进程) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(异常处理) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(多线程与进程池) Python学习笔记——进阶篇[第九周]———线程.进程.协程篇(队列Queue和生产者消费者模型) Python学习笔记——进阶篇[第九周]———协程 Python学习笔记——进阶篇[第九周]———MYSQL操作

(转载)OC学习篇之[email&#160;protected]关键字的作用以及#include和#import的区别

前一篇文章说到了OC中类的三大特性,今天我们来看一下在学习OC的过程中遇到的一些问题,该如何去解决,首先来看一下我们之前遗留的一个问题: 一.#import和#include的区别 当我们在代码中使用两次#include的时候会报错:因为#include相当于拷贝头文件中的声明内容,所以会报重复定义的错误 但是使用两次#import的话,不会报错,所以他可以解决重复导入的问题,他会做一次判断,如果已经导入一次就不导入了 二.关键字@class的作用 在来看一下OC中的关键字@class的作用,在