Objective - C
yxcharles
just do IT
展开
-
self 和 构造方法 类方法 实例方法
self关键字// 在类的内部如何获得一个对象的地址// self关键字,谁调用,self就代表着谁/*1> 在动态方法中,self代表着"对象"2> 在静态方法中,self代表着"类"3> 万变不离其宗 :self代表着当前方法的调用者如何创建一个oc对象 // 1.必须要调用创建对象的方法,new专门用来创建对象的方法 // 2.oc只要是调用原创 2015-08-09 11:14:43 · 765 阅读 · 0 评论 -
runtime自定义
#import #import #import "Person.h"// 类Class obj_class(id obj) { Class class = object_getClass(obj); return class;}// 类名NSString *obj_ClassName(id obj) { const char *name = object_g原创 2015-08-09 09:50:04 · 288 阅读 · 0 评论 -
属性封装和点语法
属性的封装 setter 和 getter 方法为什么要封装属性,为什么不能把成员变量设置为public?/* 在实际的开发中,绝对不允许任何一个成员变量为public 所有的成员变量都必须不能够在外部直接使用—>的方法,因为这样做不能够保证我们数据的安全,很有可能出现脏数据(错误数据) 如果类内部的成员变量需要依赖外部传入值,那么我们就要提供对应的set方法供外部访问*/原创 2015-08-09 11:13:24 · 630 阅读 · 0 评论 -
类的组合关系
类的组合关系 // iOS中没有空指针异常,给nil发送消息不会产生异常// 一个类中保存另一个类中相关的实例变量,是面向对象编程中最为常用的组合关系 // 组合关系是类与类设计中最为常见的强耦合关系,当一个类文件发生改变的时候,会直接影响到另一个类文件也必须要修改 属性的封装 setter 和 getter 方法为什么要封装属性,为什么不能把原创 2015-08-09 11:11:26 · 977 阅读 · 0 评论 -
MRC内存管理1
野指针和内存泄露// 1.内存泄露 Person *person = [[Person alloc]init]; // 1 NSLog(@"person count = %ld",person.retainCount); [person retain]; // 2 Person原创 2015-08-09 09:52:54 · 371 阅读 · 0 评论 -
文件 操作
// 文件管理器 简单单例模式 // NSFileManager *fileManagr1 = [[NSFileManager alloc]init]; NSFileManager *fileManager = [NSFileManager defaultManager]; // Returns the shared原创 2015-07-21 17:20:06 · 334 阅读 · 0 评论 -
类别
类别// 如果在Category和类中有相同的方法名 // Category 优先 // 如果在两个Category中有两个重名的方法,那么在complie source中谁在后面,就会执行哪一个 在ARC中,strong,weak用于对象的内存管理 strong考虑对象的内存管理 相当于 MRC 中的retain weak不考虑内存管理,相当原创 2015-08-09 09:42:00 · 246 阅读 · 0 评论 -
ARC内存管理1
// strong 相当于手动内存管理中的 retain 关键字// weak 相当于手动内存管理中的 assign 关键字@property (nonatomic,strong)Car *car;@property (nonatomic,assign) int age;// strong 强指针// weak 弱指针/* 只要有一个强指针指向一个对象,那么系统就不会回收原创 2015-08-09 09:54:34 · 495 阅读 · 0 评论 -
成员变量和属性
成员变量的作用域@interface Person : NSObject { /* 成员变量的作用域 <1.@public 完全公开成员变量 <2.@private 只有在自己内部才可以直接访问 <3.@protected 只有在自己的内部或者子类的内部才可以‘直接访问’ 成员变量默认都是@protect原创 2015-08-09 10:32:12 · 429 阅读 · 0 评论 -
协议和继承的关系
/// 如果一个类遵守了协议,那么这个类的实例对象也就遵守了协议,具备了协议中的行为// 协议规范了IosProgrammer类的行为// 一旦遵守这个协议,协议中的方法就不需要声明,直接实现@protocol IosCoderProtocol // @protocol 协议名字 @protocol NSObject // 基协议// 自定义的协议都要遵守 协议 基协议// Io原创 2015-08-09 09:48:09 · 1464 阅读 · 1 评论 -
协议
/// 如果一个类遵守了协议,那么这个类的实例对象也就遵守了协议,具备了协议中的行为// 协议规范了IosProgrammer类的行为// 一旦遵守这个协议,协议中的方法就不需要声明,直接实现@protocol IosCoderProtocol // @protocol 协议名字 @protocol NSObject // 基协议// 自定义的协议都要遵守 协议 基协议// Io原创 2015-08-09 09:43:41 · 244 阅读 · 0 评论 -
数组
不可变的数组// 1.初始化一个数组 此方法中最后一个元素必须是nil A comma-separated list of objects ending with nil. // 用逗号分隔的一序列对象,nil是最后一个元素 NSArray *array = [[NSArray alloc]initWithObjects:@"one",@"two",@"th原创 2015-07-21 17:13:04 · 285 阅读 · 0 评论 -
对象等
self关键字// 在类的内部如何获得一个对象的地址// self关键字,谁调用,self就代表着谁/*1> 在动态方法中,self代表着"对象"2> 在静态方法中,self代表着"类"3> 万变不离其宗 :self代表着当前方法的调用者如何创建一个oc对象 // 1.必须要调用创建对象的方法,new专门用来创建对象的方法 // 2.oc只要是调用原创 2015-07-21 08:23:34 · 243 阅读 · 0 评论 -
集合
// 无序对象集合 数据不能重复添加 NSSet *set = [[NSSet alloc]initWithObjects:@"one",@"two",@"three", @"four",@"five",@"one",nil]; // @"one"没有添加进去 NSLog(@"set = %@",set); // - (NSUInt原创 2015-07-21 17:18:53 · 214 阅读 · 0 评论 -
属性封装
7.17面向对象 -理解 是因为实际生活中,存在着很多问题,我们需要分析这些问题的过程抽象化,任何问题都有潜在的执行逻辑,逻辑中会存在着能表达逻辑内容东西的对象存在,每一个对象都具有复杂的意义。 面向过程编程在分析问题的过程中,注重的是更加过程化的东西,但是面向对象把实际问题给抽象出来,然后给具体实现出来,我们在分析问题的逻辑步骤中,去找完成解决问题的这些对象。如何分析实际需原创 2015-07-21 08:28:16 · 593 阅读 · 0 评论 -
NSData
//// - (NSData *)contentsAtPath:(NSString *)path;// - (BOOL)createFileAtPath:(NSString *)path contents:(NSData *)data attributes:(NSDictionary *)attr; // 1.获得文件,转化为data原创 2015-07-21 17:23:03 · 385 阅读 · 0 评论 -
归档test
#define PATH @"/Users/ms/Desktop/未命名文件夹/file.plist"int main(int argc, const char * argv[]) { @autoreleasepool { // NSDictionary *dic = [[NSDictionary alloc]initWithObjec原创 2015-08-18 19:41:19 · 247 阅读 · 0 评论 -
继承和协议的关系
// 不同点 /* 协议: a.协议中不可以声明变量,只能声明方法 (遵守协议的类实现方法) b.一个类可以遵守多个协议,实现类似C++的多继承 继承: a.继承中可以声明成员变量和方法,子类继承父类之后,子类会继承父类所拥有的成员变量和成员方法,子类可以不写父类的方法原创 2015-08-27 10:14:27 · 485 阅读 · 0 评论 -
OC中的两种枚举解释
下面来简单的解释一下OC里枚举的两种类型.NS_ENUM和NS_OPTIONS本质上是一样的都是枚举.我举个例子.typedef NS_ENUM(NSInteger, UIViewAnimationTransition) { UIViewAnimationTransitionNone, UIViewAnimationTransitionFlipFromLeft,转载 2015-10-18 19:52:43 · 2727 阅读 · 0 评论 -
OC总结之字典
// 1.创建字典 NSDictionary *jack = [[NSDictionary alloc] initWithObjectsAndKeys: @"jack", @"name", @"18", @"age", nil]; // 2.快速创建字典,比较常用 NSDi原创 2015-07-21 17:14:26 · 406 阅读 · 0 评论 -
self和super的底层原理
最近打印 NSStringFromClass([self class]) NSStringFromClass([super class]) 是一个结果,很是纳闷。. self和super 到底什么关系和区别?又研究了一遍消息机制,每次都有一点收获,但是rumtime简直不是人看的,那是什么鬼东西。1.当使用 self 调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找;原创 2015-08-28 19:34:25 · 416 阅读 · 0 评论 -
iOS Runtime 和消息机制
struct objc_class *Class; // Class是一个objective-c class类型的指针 struct objc_object *id; // id是一个objc_object结构类型的指针struct objc_class { Class isa; Class super_class; const char *name;原创 2015-07-21 09:09:17 · 367 阅读 · 0 评论 -
UI总结之获取各种路径1
// 1.获取家路径 NSString *homeDir = NSHomeDirectory(); NSLog(@"%@",homeDir); // 2.获取Documents目录路径的方法 NSArray *docPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUser原创 2015-08-18 20:16:51 · 672 阅读 · 0 评论 -
FMDB2
#import "DatabaseManager.h"#import "FMDB.h"#import @interface DatabaseManager (){ /** * 数据库对象 */ FMDatabase *_database;}@end@implementation DatabaseManager- (instancety原创 2015-09-27 13:54:58 · 401 阅读 · 0 评论 -
FMDB3
事务 提高效率 一次性操作。- (void)viewDidLoad { [super viewDidLoad]; FMDatabase *db = [FMDatabase databaseWithPath:[self dbPath]]; [db open]; // 拼接sql语句 NSString *sql = @"cr原创 2015-09-27 14:02:53 · 315 阅读 · 0 评论 -
FMDB
#import "DBManager.h"#import "FMDatabase.h"#import "User.h"@implementation DBManager { FMDatabase *_database; }- (instancetype)init { self = [super init]; if (self) {原创 2015-09-27 13:52:00 · 298 阅读 · 0 评论 -
Runtime 和消息机制
RunTime简称运行时。就是系统在运行的时候的一些机制,其中最主要的是消息机制。对于C语言,函数的调用在编译的时候会决定调用哪个函数( C语言的函数调用请看这里 )。编译完成之后直接顺序执行,无任何二义性。OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编译阶段,OC可以调用任何函数,即使这个函数并未实现,只要声明过就不会报错。而原创 2015-07-21 08:21:50 · 332 阅读 · 0 评论 -
NSUserDefault
之前学习过归档解档,今天才明白原来NSUserDefault与归档解档联系在一起。 // NSUserDefaults类提供了一个与默认系统进行交互的编程接口,// NSUserDefaults对象是用来保存,恢复应用程序相关的偏好设置,配置数据等。// 默认系统允许应用程序自定义它的行为去迎合用户的喜好,// 可以在程序运行的时候从用户默认的数据库中读取程序的设置原创 2015-08-26 13:50:36 · 333 阅读 · 0 评论 -
归档KeyArchive
// 1.// value1 key1 value2 key2// NSDictionary *dic = [[NSDictionary alloc]// initWithObjectsAndKeys:@"one",@"1",@"two",@"2", nil]; // [dic writeToFile:@"/Users/ms/原创 2015-08-18 20:04:58 · 517 阅读 · 0 评论 -
KVC小结
// 键值编码 // 设置// [person setValue:@"Charles" forKey:@"name"]; NSMutableArray *cars = [NSMutableArray array]; for (int i =0; i < 3; i++) { Car *car = [[Car alloc]原创 2015-08-18 20:31:30 · 297 阅读 · 0 评论 -
MRC内存管理2自动释放池
// autorelease // 示例1. Person *person = [[Person alloc]init];// release 功能立即减1// autorelease 延迟减1 将对象放入池子中,返回一个self [person autorelease]; } // 代表池子将要销毁,对池子中所原创 2015-08-09 09:57:07 · 517 阅读 · 0 评论 -
字符串
NSString1.字符串初始化- init;+ string;+ stringWithString:;2.字符串的获取长度:length单个字符索引:- characterAtIndex获取子串获取子串1:从index到最后,包括index - subStringFromIndex:获取子串2:从开头到index,不包括index - subStri原创 2015-07-21 08:29:32 · 227 阅读 · 0 评论 -
iOS多参的一点思考。
- (NSString *)addMoreArgs:(NSString *)firstObj,...NS_REQUIRES_NIL_TERMINATION { // va_list 是在C语言中解决变参问题的一组宏, // va_start(, ) 获取可变参数列表的第一个参数的地址 ap: 是类型为va_list的指针,param是可变参数列表的第一个参数原创 2015-09-27 14:00:04 · 423 阅读 · 0 评论