oc

OC语言自学《十二》---- OC(Foundation框架部分知识总结)

筅森魡賤 提交于 2019-12-07 19:12:51
###NSRange 表示一个范围 主要用来操作字符串 代码示例: <!-- lang: cpp --> //NSRange是一个结构体,其中location是一个以0为开始的index,length是表示对象的长度。他们都是NSUInteger类型。 //定义如下 typedef struct _NSRange { NSUInteger location; NSUInteger length; } NSRange; //NSUInteger的本质时unsigned long类型 typedef unsigned long NSUInteger; NSRange range = NSMakeRange(2,4); //需要记住的创建范围方式 NSString *str = @"i love oc"; //NSString的对象方法rangeOfString查找某个字符串在str中的范围 NSRange range1 = [str rangeOfString:@"ve o"]; //ve o在str字符串中的范围 4 4 //如果找不到,location=NSNoFound=-1,length=0, NSRange range2 = [str rangeOfString:@"java"]; NSLog(@"\nlocation=%ld,length=%ld",range1

OC数据类型 enum NSRange NSPoint NSSize NSRect NSDate N

*爱你&永不变心* 提交于 2019-12-07 17:54:07
//------------------------------------------------ // 可变的字典 NSMutableDictionary // 第一种定义方式 返回一个空的字典 NSMutableDictionary *mutableDict1 = [ NSMutableDictionary dictionary ]; // 第二种定义方式 返回一个空的字典 并且创建一个初始的存储空间 NSMutableDictionary *mutableDict2= [[ NSMutableDictionary alloc ] initWithCapacity : 10 ]; // 第三种定义方式 返回一个字典 里面包含里了一个已创建过的不可变的字典集合 // 返回数组集合里面包含字典里的所有的 Key 数据 NSArray *array1 = [mutableDict2 allKeys ]; // 利用 Key 数组的有序性,返回字典里的 Value for ( int i = 0 ; i < [mutableDict2 count ]; i++ ){ NSLog ( @"key: %@, value: %@" ,array[i], mutableDict2[array1[i]]); } //--------------- 枚举 ----------------- /

【OC】十一、数组对象(NSArray & NSMutableArray)

扶醉桌前 提交于 2019-12-07 08:44:13
不可变数组: NSArray 可变数组: NSMutableArray 创建一个不可变数组 简单的创建一个数组 [NSArray arrayWithObjects: @"111",@"222",nil]; 我们可以按顺序列出对象并用逗号隔开,并且最后一个值指定为nil 这时候我们可以使用 arrayWithObjects 方法 我们可以取出数组的值 用objectAtIndex方法 [arr objectAtIndex:0]; 创建一个可变数组 如果我们想要在数组中添加 删除 修改元素 我们可以使用NSMutableArray NSMutableArray *arr = [NSMutableArray array]; 给数组分配容量 NSMutableArray *array= [ NSMutableArray arrayWithCapacity : 20 ]; 在数组末尾添加对象 [array addObject:"Four"]; 删除数组中指定索引处对象 [array removeObjectAtIndex:1]; 快速枚举 for(NSString *string in array) { NSLog(@"string:%@",string); } 来源: oschina 链接: https://my.oschina.net/u/1048271/blog/209005

五.Foundation框架(1)--NSSize   NSPoint   NSRange   NSRect 结构体

守給你的承諾、 提交于 2019-12-07 04:30:58
在讲述框架之前,我们可以想象一个问题,那就是为什么我们每次创建文件的时候,都去选择Cocoa Class或者Cocoa Touch Class 尼? Cocoa 是什么? ocoa不是一种编程语言(它可以运行多种编程语言),它也不是一个开发工具(通过命令行我们仍然可以开发Cocoa程序),它是创建Mac OS X和IOS程序的原生面向对象API,为这两者应用提供了编程环境。 我们通常称为“Cocoa框架”,事实上Cocoa本身是一个框架的集合,它包含了众多子框架,其中最重要的要数“Foundation”和“UIKit”。前者是框架的基础,和界面无关,其中包含了大量常用的API;后者是基础的UI类库,以后我们在IOS开发中会经常用到。这两个框架在系统中的位置如下图: 其实所有的Mac OS X和IOS程序都是由大量的对象构成,而这些对象的根对象都是NSObject,NSObject就处在Foundation框架之中 通常我们会将他们分为几类: 值对象 集合 操作系统服务:文件系统、URL、进程通讯 通知 归档和序列化 表达式和条件判断 Objective-C语言服务 常用结构体 在C语言阶段我们已经学过结构了,而为了简化我们的开发,Foundation框架为我们预先创建了很多,在开发中常用的结构体。这样的话,我们就不必要每次创建项目的时候都去创建同样的代码。 1.NSSize

3.成员变量标准访问方法的实现(@property和@synthysize)

Deadly 提交于 2019-12-07 00:42:41
1、@property和@synthesize的用途: @property、@synthesize用于自动生成类成员变量的存取方法(setter方法和getter方法)。 @property用在头文件里边,而@synthesize用于源文件里边。( xcode4.5以及以后的版本,@synthesize可以省略) 在默认情况下,当源文件里边没有实现setter和getter方法时,通过synthysize可以自动生成标准的setter和getter方法。注意:通过synthysize实现的setter和getter都是原子性访问的。多线程同时访问时,保障访问方法同时只能被一个线程访问。 如: (1)YtsStudent.h: #import <Foundation/Foundation.h> @interface Student : NSObject { int _age; int _no; } @property int age; @property int no; @end (2)YtsStudent:m #import "Student.h" @implementation Student @synthesize age=_age, no=_no,name; //因为代码中没有定义成员变量name,所以系统将自动生成一个成员变量name。 @end 2、

oc 中一个典型的字典转模型样板格式

二次信任 提交于 2019-12-06 16:18:29
自己处理数据模型时,此种格式,不管属性是否为空,都可以任意使用,因为使用了排空方法,十分好用,强烈推荐,代码如下: 模型.h文件中: #import <Foundation/Foundation.h> @class User; @interface Status : NSObject @property (nonatomic,copy) NSString *created_at; @property (nonatomic,assign) int64_t id; @property (nonatomic,copy) NSString *text; @property (nonatomic,copy) NSString *source; @property (nonatomic,strong) User *user; //配图数组 @property (nonatomic,strong) NSArray *pic_urls; @property (nonatomic,strong) Status * retweeted_status; //配图字符串数组 //@property (nonatomic,strong) NSMutableArray *pic_strs; + (instancetype)statusWithDict:(NSDictionary *)dict; -

Method Swizzling利用OC动态性解决问题

ε祈祈猫儿з 提交于 2019-12-06 00:33:09
Method Swizzling 原理 在Objective-C中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector的名字。利用Objective-C的动态特性,可以实现在运行时偷换selector对应的方法实现,达到给方法挂钩的目的。 每个类都有一个方法列表,存放着selector的名字和方法实现的映射关系。IMP有点类似函数指针,指向具体的Method实现。 我们可以利用 method_exchangeImplementations 来交换2个方法中的IMP, 我们可以利用 class_replaceMethod 来修改类, 我们可以利用 method_setImplementation 来直接设置某个方法的IMP, …… 归根结底,都是偷换了selector的IMP. // // MRProgressOverlayView+runtime.m // Identify // // Created by wupeng on 15/12/3. // Copyright © 2015年 StarShine. All rights reserved. // #import "MRProgressOverlayView+runtime.h" #import <objc/runtime.h> #import "StringUtils.h" #import

iOS

淺唱寂寞╮ 提交于 2019-12-05 15:43:52
https://www.cnblogs.com/QianChia/p/5777341.html#_label2 本文目录 前言 1、在 Swift 中使用 Objective-C、C 代码 2、在 Objective-C 中使用 Swift 代码 回到顶部 前言 在 Swift 语言中,我们可以使用 Objective-C、C 语言编写代码,我们可以导入任意用 Objective-C 写的 Cocoa 平台框架、Objective-C 框架或 C 类库。 回到顶部 1、在 Swift 中使用 Objective-C、C 代码 1.1 在 Swift 项目中使用 Objective-C、C 代码 1> 在 Swift 项目中创建 OC/C 的 .h 和 .m / .c 文件,文件中的格式为其本有的格式。 2> Xcode 提示是否创建 Objective-C bridging 头文件,点击 Yes 创建,Xcode 会自动创建一个桥接头文件,文件名的格式是 "项目名-Bridging-Header.h"。 一般情况下,Xcode 辅助生成的桥接头文件在编译属性里已经帮我们设置了引用,如果没有的话需要自己将其配置到项目中,选中项目中的 Targets => Build Setting => Swift Compiler - general => Objective-C Bridging

《Using Swift with Cocoa and Objective-C》总结

纵饮孤独 提交于 2019-12-05 12:32:00
互用性 1>与Objective-C API交互 1.初始化 1)在OC中,初始化往往会有init、initWith字眼,但在swif却在这里都省略了,连分配内存的alloc,swift也会自动帮我们处理。 //Objective-C UITableView *myTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; //Swift let myTableView: UITableView = UITableView(frame: CGRectZero, style: .Grouped) 2)在初始化的时候,我们甚至可以忽略对象类型。 let myTextField = UITextField(frame: CGRect(x: 50, y: 50, width: 200, height: 39)) 3)关键字convenience 这类方法是Swift初始化方法中的“二等公民”, 只作为补充和提供使用上的方便 。所有的convenience初始化方法都必须调用同一个类中的designated初始化完成设置,另外convenience的初始化方法是不能被子类重写或从子类中以super的方式被调用的。虽然不能重写,但可以子类也可以调用 class ClassA

[swift]-闭包前oc中block的说明

若如初见. 提交于 2019-12-05 10:47:01
1:oc中blcok是一个匿名函数,常用于回调 2:oc中blcok的三种常见定义: #import "HttpTool.h" typedef void(^myBlock)(NSString *name); @interface HttpTool () //typedef定义法 - (void)httpToolBlock:(myBlock)callBlock; // void(^block名字)(参数列表) @property (nonatomic, copy)void(^callBlock)(NSString *name); // 方法的block定义 //(void(^)(NSString *str))callBlock - (void)blockFunc:(void(^)(NSString *name))callBlock; @end 3:对于block中经常会注意循环引用的问题:最好的办法是使用weckself,常见写法: #define WS(weakSelf) __weak __typeof(&*self)weakSelf = self; 1. __weak XJViewController *weakSelf = self; 2. __weak typeof(self) weakSelf = self; 3. __weak __typeof(self)weakSelf