iOS
wangchen2009hao
这个作者很懒,什么都没留下…
展开
-
@property 的属性
OC的 @property 语法可以自动帮助生成 成员变量,get 方法,和set 方法,但是 @property 还可以有一些属性可以对生成的方法进行精细化控制。 这些精细化控制主要分几类:1、跟set 方法内存管理相关的 * assign : 默认的,直接生成 set 方法 (适用于非 OC 对象) * retain : release 旧值,retain 新值,(适用于 OC 对象) *原创 2016-05-15 23:36:35 · 218 阅读 · 0 评论 -
循环引用
解决循环引用的问题就是一端用 retain 一端用 assign 这是个特例原创 2016-05-16 23:21:13 · 183 阅读 · 0 评论 -
单个文件转换非ARC
1、项目上单击2、右侧 targets -> build Phases -> compile Sources 里面有编译的 .m 文件3、文件上双击,或者回车 填入 -fno-objc-arc 4、想要某个文件是 ORC 填入 -f-obj-arc原创 2016-05-18 22:49:09 · 281 阅读 · 0 评论 -
ARC和非ARC区别
ARC 是编译器特性看到 @property (retain), 自动在 dealloc 里面添加相关属性的 release ,看到 你在main 方法里面调用 alloc ,就在后面自动给你添加 release注意不是垃圾回收,垃圾回收是运行时特性原创 2016-05-17 23:12:31 · 869 阅读 · 0 评论 -
OC 分类注意事项
分类会覆盖原来类中已经实现的方法分类可以访问原来类中的成员变量,但是不能添加成员变量如果两个分类中都实现了某个方法,执行哪个方法和分类的编译顺序有关,编译顺利那里看 项目名称 -> build phased -> compile sources查看编译顺序的时候就能看出来,.h 文件是不被编译的,就是被别人 import 的原创 2016-05-07 10:57:21 · 176 阅读 · 0 评论 -
autorelease 的封装
由于代码Person *p = [[[Person alloc]init]autorelease];太长,所以可以用类方法对他进行封装+ (id)person{ return [[[Person alloc]init]autorelease];}这样可以快速返回一个 autorelease 的对象原创 2016-05-17 22:23:36 · 192 阅读 · 0 评论 -
autorelease
自动释放手动内存管理的时候由于每次 alloc 以后都要调用 release 方法,为了简化管理,可以使用自动释放池使用方法是Person *p = [[[Person alloc]init]autorelease]这句话的意思是把 Person 对象放到自动释放池中,当自动释放池销毁的时候,会把自动释放池中的对象统一进行一次 release如何创建自动释放池 @autorelease{}大括号开原创 2016-05-17 20:46:50 · 177 阅读 · 0 评论 -
typedef block
typedef int (*sump) (int,int);sump p = sum; sump p2 = sum;定义了一个block原创 2016-05-30 22:18:48 · 215 阅读 · 0 评论 -
使用 OC 创建一个类
利用 OC 可以的面向对象可以创建一个类具体步骤声明接口 注意继承 NSObject 父类,NSObject 是 Foundation 框架里面的,所以需要 import Foundation 框架声明实现调用 new#import <Foundation/Foundation.h>@interface Car : NSObject{ int wheel; int peed;原创 2016-04-21 22:03:42 · 328 阅读 · 0 评论 -
第一个 block 的进化
{ NSLog(@">>>>>>");}这是个代码块^{ NSLog(@">>>>>>");};加上尖号,加上 分号 生命这是个 block 里面保存了一段代码void (^myblock)() = ^{ NSLog(@">>>>>>");};声明一个blockmyblock();调用 block原创 2016-05-18 23:15:26 · 198 阅读 · 0 评论 -
isa 指针
每个对象都有一个 isa 指针,指向内存里面的对象,对象里面保存的是方法列表,调用对象的方法的时候就是通过 isa 指针找到对应的类的地址,调用方法列表原创 2016-04-23 15:35:51 · 201 阅读 · 0 评论 -
类的初始化过程
类的初始化过程中有两个比较重要的方法 + (void)load +(void)initialize 这两个方法是自动调用的load 方法在程序启动的时候的每个类的 load 方法都会被调用一次,注意是每个类的 load 方法,不是对象的,程序启动的时候initialize 方法在类被初始化的时候会调用一次,注意初始化,调用顺序是先调用 父类的,再调用子类的原创 2016-05-08 18:23:58 · 213 阅读 · 0 评论 -
CGPoint/NSPoint CGSize/NSSize
CGPoint 和 NSPoint 是一个东西 typedef CGPoint NSPoint 后台是这样来的CGPoint 是一个结构体 里面有两个属性,NSFloat(其实就是 double) 类型的 X 和 Y原创 2016-06-01 23:10:53 · 457 阅读 · 0 评论 -
NSRange
NSRange 是一个结构体这个结构体和简单 只有两个属性 typedef struct _NSRange { NSUInteger location; NSUInteger length;} NSRange;location 表示的位置 length 表示的是长度NSRange 的三种初始化方法 NSRange range1 = {2,3};// 不用 NSRange ra原创 2016-06-01 22:44:41 · 209 阅读 · 0 评论 -
C和OC 字符串
#import <Foundation/Foundation.h>int main(){ char *str = "1234567"; NSString *str2 = @"7654321"; NSLog(@"%s", str); NSLog(@"%@", str2);}原创 2016-04-24 20:56:29 · 176 阅读 · 0 评论 -
OC 继承
#import <Foundation/Foundation.h>@interface Person : NSObject{ int _age;}@end@implementation Person@end@interface Student : Person{ int _age;}@end@implementation Student@end这里 student 继承 p原创 2016-04-24 17:38:33 · 217 阅读 · 0 评论 -
OC 类对象
OC 中类也是一种对象,叫 Class 对象类对象的作用,可以用类对象直接调用类方法 获取类对象,一般直接调用 类的 class 方法就可以 Class c = [Animal class]; // Class 不用加 * 内部已经自动加 * [c test]; // test 是类方法,就是以 + 开头的还可以通过 Class 对象创建对象 Class c = [Animal原创 2016-05-08 17:55:45 · 238 阅读 · 0 评论 -
protocol简单使用
可以声明一大堆方法(不能生命成员变量) 只要某个类遵循了这个协议,就相当于拥有了这个协议中的所有方法声明 只要父类遵循了某个协议,就相当于子类也遵守了原创 2016-05-30 23:00:04 · 301 阅读 · 0 评论 -
C 枚举类型
typedef enum{ SexMal, SexFemal} Sex;typedef struct{ int year; int month; int date;} Date;区别 枚举中间用逗号隔开, 最后没有符号 结构体 中间用分号隔开原创 2016-04-23 18:20:31 · 318 阅读 · 0 评论 -
@class
@class 的作用:仅仅告诉编译器这是一个类开发中引用类的规范 1、在 .h 文件中用 @class 来声明类 2、在.m 文件中用 #import 来包含类的所用东西原创 2016-05-16 23:14:54 · 182 阅读 · 0 评论 -
宏定义
#define YES (BOOL)1#define NO (BOOL)0宏定义是预编译指令,会在代码编译之前把前面的内容都替换成后面的内容取消宏定义用#undef YES原创 2016-04-20 23:31:49 · 368 阅读 · 0 评论 -
typedef的使用
c 语言可以利用 typedef 给类型取一个别名,特别是比较长的类型,这样用起来会感觉方便很多例如:#include <stdio.h>int add (int a, int b){ return a + b;}int minus (int a, int b){ return a - b;}int main(){ typedef int myint; typed原创 2016-04-17 11:21:20 · 190 阅读 · 0 评论 -
OC 成员变量的作用域
OC 中成员变量有四个作用域@private@protected@package@public这四个作用域的作用范围是从小到大的@private 的作用域只能在当前类的对象方法中使用,外部的类想要使用只能调用 get 方法 和 set 方法@protect 的作用域是只能在当前类 或者当前类的子类中直接访问@public 的作用域是可以在任何地方通过 -> 访问@package 的作用域是原创 2016-04-29 22:43:31 · 324 阅读 · 0 评论 -
OC 点语法
OC 中有一种特殊的语法叫 点语法 先看例子#import <Foundation/Foundation.h>#import "Person.h"int main() { Person *p = [Person new]; p.age = 10;// 内部是 [p setAge:10] NSLog(@"这个人的年龄是 %d", p.age);// 内部是 [p age]原创 2016-04-29 21:56:24 · 256 阅读 · 0 评论 -
SEL
OC 中方法会被封装成 SEL 对象,当我们调用一个方法的时候,其实会在实例对象中把要调用的方法封装成 SEL 对象,然后通过 isa 指针找到 类对象的方法列表,调用对应的方法SEL 类型的定义 typedef struct objc_selector *SEL原创 2016-05-10 21:38:13 · 241 阅读 · 0 评论 -
为什么引入 .h 而不是 .m
.h 文件里面存的是函数的声明 .m 文件里面存的是函数的实现使用 #import 的时候相当于 把.m 的文件整个拷贝到新的文件里面了,而 xcode 是多文件同时编译、链接,这时候如果 编译没有问题,链接的时候就会出现重复定义的错误duplicate symbol _OBJC_CLASS_$_Person in: /Users/apple/Library/Developer/Xcode原创 2016-04-27 23:38:29 · 245 阅读 · 0 评论 -
结构体赋值
机构体中间赋值把对应的属性对拷,但是不是指针替换 struct Person { int age; double height; char *name; }; // 定义结构体的时候要带上 // 类比 int a = 1; struct Person p = {.name="jack",.height=1.8原创 2016-04-13 22:17:47 · 246 阅读 · 0 评论 -
C 语言的结构体
C 语言的符合类型有一种结构体的存在#include <stdio.h>int main(){ struct Person { int age; double height; char *name; }; // 定义结构体的时候要带上 // 类比 int a = 1; struct Person p =原创 2016-04-12 22:42:11 · 194 阅读 · 0 评论 -
指向函数的指针
C 语言的指针是可以指向函数的例如:#include <stdio.h>// 函数声明void test();int main(){ // 声明指向函数的指针,固定写法 void (*p)(); p = test; // 调用函数方法1 (*p)(); // 函数调用方法2 p();}void test(){ printf("函数原创 2016-04-12 21:37:14 · 182 阅读 · 0 评论 -
C语言声明字符串的两种方式
c语言是没有字符串类型的,只有字符型 charc 语言表示字符串只能用数组或者指针。例如:#include <stdio.h>int main(){ char a[] = {'a','b','c'}; char *b = "123"; for (int i = 0; i < 3; i++) { printf("%c\n",a[i]); } prin原创 2016-04-11 23:30:39 · 9883 阅读 · 1 评论 -
引用计数器
alloc new copy 以后新创建的对象的引用计数器是1引用计数器 +1 调用 retain 应用计数器 -1 调用 releaseretainCount 方法 返回当前的引用计数器当引用计数器为 0 的时候对象会被销毁,当一个对象被销毁的时候,系统会自动向对象发送一条 dealloc 消息,遗言,让他释放对象用的原创 2016-05-11 22:45:48 · 290 阅读 · 0 评论 -
空指针和野指针
空指针: 指针不指向任何对象野指针:指针指向的对象已经被销毁原创 2016-05-11 22:47:07 · 223 阅读 · 0 评论 -
使用OC调用C语言的函数
one.m#import "two.h"int main(){ test(); return 0;}two.hvoid test();two.c#include <stdio.h>void test(){ printf("调用了C语言的函数\n");}编译cc one.m two.c得出结果原创 2016-04-20 23:24:55 · 938 阅读 · 0 评论 -
@property @synthesize
Xcode 中没有自动生成 set get 方法的快捷方式,OC 中提供了标签来进行 成员变量 get set 方法的声明和实现.h 文件声明{ int _age;}@property age;// 自动生成 age 属性的get方法声明 和 set 方法声明.m 文件实现@synthesize age = _age;// 前面一个age 后面一个_age 前面的 age 是生成@prop原创 2016-05-01 09:40:51 · 176 阅读 · 0 评论 -
自动生成 get set
@property 会自动生成 get 方法, set 方法 和 _ 成员变量,但是你要是自己实现了 get 方法,set 方法,@property 就不会生成 get 方法 和 set 方法,要是自己实现了一个,系统还是会给生成你没有实现的那个原创 2016-05-15 22:11:20 · 920 阅读 · 0 评论 -
内存管理原则
有 alloc 必须有 releaseset 方法规范 基本数据类型,直接赋值 - (void) setAge:(int)age { _age = age; }OC 对象类型- (void)setCar:(Car *)car{ if(car != _car) { [_car release]; _car = [car retain原创 2016-05-15 12:54:50 · 217 阅读 · 0 评论 -
OC 构造方法
重写父类 init 方法,创建对象的时候尽量是用 alloc 和 init方法- (id)init{ self = [super init]; if(self != nil) { _age = 10; } return self;}精简写法- (id)init{ if(self = [super init]) {原创 2016-05-03 23:18:24 · 149 阅读 · 0 评论 -
命令行创建的第一个OC程序
touch 01-第一个OC程序.m用这个命令创建了第一个 OC 文件,程序内容简单,只有一句话int main(){ NSLog(@"第一个OC程序"); return 0;}main 函数和 C 语言一模一样,就是调用 OC 的框架函数 NSLog,OK,接下来 cc -c 编译 报错,缺少头文件#import <Foundation/NSObjCRuntime.h>这里和原创 2016-04-18 22:55:27 · 276 阅读 · 0 评论 -
OC id 类型
OC 中有一个万能的指针是可以执行任何对象,id 小写的例如:id p = [Person new];注意这个 id 指针是没有 * 号的原创 2016-05-01 16:01:21 · 269 阅读 · 0 评论 -
C 语言static
c语言static 修饰局部变量,局部变量生命周期变成程序结束,作用域不变 例如:#include <stdio.h>void test(){ static int a = 0; a++; printf("%d\n", a);}int main(){ test(); test(); test(); return 0;}这里 static原创 2016-04-17 22:28:04 · 293 阅读 · 0 评论