oc

OC语言@property @synthesize和id

久未见 提交于 2020-01-02 00:41:13
OC 语言 @property @synthesize 和 id 一、@property @synthesize 关键字 注意: 这两个关键字是编译器特性,让 xcode 可以自动生成 getter 和 setter 的声明和实现。 (一)@property 关键字 @property 关键字可以自动生成某个成员变量的 setter 和 getter 方法的声明 @property int age; 编译时遇到这一行,则自动扩展成下面两句: - (void)setAge:(int)age; - (int)age; (二)@synthesize 关键字 @synthesize 关键字帮助生成成员变量的 setter 和 getter 方法的实现。 语法: @synthesize age=_age; 相当于下面的代码: - ( void ) setAge:(int)age { _age=age; } - (int)age { Return _age; } (三)关键字的使用和使用注意 类的声明部分: 类的实现部分: 测试程序: 新版本中: 类的声明部分: 类的实现部分: 测试程序: (1)在老式的代码中, @property 只能写在 @interface @end 中, @synthesize 只能写在 @implementation @end 中,自从 xcode 4.4 后,

OC学习--OC中的类--类的定义,成员变量,方法

天涯浪子 提交于 2020-01-02 00:33:27
1. 类的定义 > 用关键字@interface进行声名 @end 结束 >所有的类有一个基类NSobject >类名 也是标示符 第一个字母大写 如果多个字母组成 每个单词的首字母大写 >类名 冒号":"后 是父类(继承父类) >成员变量 (属性) 用大括号{ }包含起来 >方法的声明用两种 +号表示类方法(类名调用) -表示实例方法9(对象调用) 以下是Person类的声明: #import <Foundation/Foundation.h> @interface Person:NSObject{ //成员变量 //默认是受保护的 封装特性 不允许外面的变量进行访问 int grade; @public int age; int numberId; } //1.方法必须 -号 或者 +号 开头 //2. -号 后面是函数的返回值 //3.方法名称 //4.变量 -(void)printPerson; -(void)passedAge:(int)newAge; //带两个参数的方法声明 理解:(void) 函数的返回值 //passedAge 对第一个参数的描述 //AndNumberId 对第二个参数的描述 -(void)passedAge:(int)newAge AndNuberId:(int)newNumberId; -(void)passedAge:(int)newAge

c++学习总结:获取13位系统时间戳

大憨熊 提交于 2019-12-27 21:19:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在iOS中使用NSDate来处理时间相关的操作,这在iOS客户端开发中非常方便。如果中间层使用c++来写的话,为了保证中间层代码的纯净,不能在c++中混编OC代码,这时候就要使用c++的方法来产生13位时间戳,向外传递给OC调用,如下代码展示了如何生成13位时间戳的方式, #if defined(__APPLE__) #define sprintf_s snprintf #endif time_t t = time(NULL); char timeInterval[32] = {0}; sprintf_s(timeInterval, sizeof(timeInterval), "%ld000", t); //timeInterval即为13位的时间戳。 这时候timeInterval即为c++中间层传递给OC的13位时间戳,将其转换成OC时间的方法乳腺下所示, //将中间层传过来的c++时间戳strtime转换成iOS中的时间 NSDateFormatter *formatter =[[NSDateFormatter alloc] init]; [formatter setDateFormat:@"MM/dd HH:mm"]; //atol()将const char*字符串转换为长整形long NSDate

拼多多--最新iOS面试题总结

做~自己de王妃 提交于 2019-12-25 17:41:11
关于面试题,可能没那么多时间来总结答案,有什么需要讨论的地方欢迎大家指教。主要记录一下准备过程,和面试的一些总结,希望能帮助到正在面试或者将要面试的同学吧。 一面 JSON转模型如何实现;夜间模式;播放器架构设计 请求的过程 服务端返回格式除了json还有其他的吗? 哪些OC对象是线程安全的 为什么要在主线程更新UI 如何保证OC容器在多线程下的数据安全性 SDWebImage的内存怎么设计的,更新原则是什么 两个算法题: {} 判断括号匹配性 只有一种括号,计算最少加多少个括号,使其满足匹配 二面 +load和+initialize怎么理解的,什么时候会被调用,分别讨论父类重写而子类没重写的情况 怎么理解OC的动态性 介绍下消息转发机制,说一下这些过程中用到的系统api 怎么理解Block的 Block的变量截获机制 __block的实现原理 内存管理机制 用户点击屏幕,系统是怎么找到一个view并决定由它来响应事件的 更多: iOS面试题答案合集 来源: CSDN 作者: D_猿员 链接: https://blog.csdn.net/qq_42792413/article/details/103699659

正则表达式和其在OC中的的使用

☆樱花仙子☆ 提交于 2019-12-23 20:17:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 正则表达式和其在OC中的的使用 最近对正则表达式(regex)很感兴趣, 于是了解了一下, 正则表达式是所有语言都通用的一套查找字符串的方法, 在网上找了很多入门教程, 也看了很多的教程, 也能写出来简单的正则表达式了, 但是好像还是似懂非懂的. 学习正则表达式, 看再多的教程, 都不如自己认认真真的做练习学习的快. 好吧, 我来总结一下, 供自己以后参考: 1. 先贴几个表, 正则表达式经常用到的字符及含义 表一 : 常用的元字符 代码 说明 . 匹配除换行符以外的任意字符 \w 匹配字母,数字,下划线,汉字 \s 匹配任意空白符 \d 匹配数字 \b 匹配单词的开始或者结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 表二 : 常用的限定符 代码 说明 * 重复零次或者更多次 (重复任意次数) ? 重复零次或者一次 (重复次数小于等于1) + 重复一次或者更多次 (重复次数大于1) {n} 重复n次 {n,} 重复次数大于等于n {n, m} 重复n到m次 表三 : 常用的反义代码 代码 说明 \W 匹配任意非 字母,数字,下划线,汉字 \S 匹配任意非 空白符 \D 匹配任意非 数字 \B 匹配任意非 单词的开始或者结束 [^x] 匹配任意除了x外任意字符 [^aeio] 匹配任意非aeio的字符 表四

OC的本质

那年仲夏 提交于 2019-12-22 13:57:25
1.OC的本质是什么? OC的对象和类是基于C/C++的结构体来实现的。OC的代码转换过程如下: OC->C/C++ ->汇编语言 -> 机器语言。 2.如何查看OC的代码转成了C/C++的代码呢? 例如创建了一个工程,名字为OC-01,编写代码如下: @interface Student : NSObject @end @implementation Student @end int main(int argc, const char * argv[]) { @autoreleasepool { Student *stu = [[Student alloc] init]; } return 0; } 启动命令行,切换路径到main.m所在的文件下,如下图: 回车,进入文件夹后,输入如下的字符串: xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main.cpp 解释: xcrun---表示xcode 执行 iphoneos -- 表示苹果手机平台 -arch arm64 -- 表示架构为arm64 -rewrite-objc -- 表示重写objc的代码 main.m -- 表示要转成C++的文件 -o --表示输出 main.cpp -- 表示转成的文件名称(格式为:名称.cpp) 回车之后

OC中自定义init方法

假装没事ソ 提交于 2019-12-22 08:18:23
---恢复内容开始--- 我们知道,在函数中实例化一个对象,大多数会同时进行初始化,如 Person *p =[ [Person alloc]init]; 此时已经进行了初始化,使用init方法,那么我们能不能重写init方法呢,让它可以在初始化的时候直接赋值,可以从内部赋值也可以从外部赋值。我们先把代码写出来然后进行分析: -(id)init { if (self = [super init]) { self.age = 30; } return self; } 在这块代码中,除去self.age = 30;该结构是构造方法的固定模式。在这里我们不得不提及 self,self可以用来调用方法,类方法和实例方法都可以用self调用,那么self是什么?我们不需要知道self是什么,因为self时刻在变,一句话,当前的方法是谁在调用,self就是谁。self类似于C++和Java中的this,大家可以参照理解。我们来实例化一个对象,P在此处的代码中,self指的是 p ,因为age是p的属性。这块代码,-(id),指的是任何类型,假设我们不知道返回值self是什么类型,我们也不必担心,因为-(id)可以指代任何类型。if(self = [super init]),括号内是对self进行初始化,括号外是if,意思是初始化成功才向后执行,失败则直接返回,系统回收已分配的资源

OC self和super

旧城冷巷雨未停 提交于 2019-12-22 08:16:35
在OC中 1 self是一个指针,在每一个方法中都有一个self指针 2 self可以出现在所有的方法中(对象方法和类方法),不能在函数中 3 self指向调用者。(谁调用它就指向谁) 4 可以使用self->成员变量 访问当前对象内部的成员变量, 没有self.成员变量访问成员变量的 5 当使用self调用方法时,会从当前类的方法列表中开始寻找,如果没有,就从父类中再找,而使用super时,则从父类的方法列表中开始找,然后调用父类的这个方法 6 可以使用[self 方法名] 调用方法 ,或在方法名为setter/getter方法名情况下,可用 self.方法名 调用方法 super的作用 1.直接调用父类中的某个方法 2.super处在对象方法中,那么就会调用父类的对象方法 super处在类方法中,那么就会调用父类的类方法 3.使用场合:子类重写父类的方法时想保留父类的一些行为 开始我们的问题: @implementation Son : Father - (id)init { self = [super init]; if (self) { } return self; } 这段代码 估计很多人都 写烂了,就算没写烂,xcode 自动生成的 我们也看吐了。 好吧,来说说原来, 上来就是 : 这个其实就是 在子类实现初始化前 调用父类的init实现. 这跟没说一样,稀里糊涂的。

Spring中使用RedisTemplate操作Redis(spring-data-redis)

ぃ、小莉子 提交于 2019-12-22 05:36:52
RedisTemplate如何检查一个key是否存在? return getRedisTemplate().hasKey(key); 由一个问题,复习了一下redis 抄自: https://www.jianshu.com/p/7bf5dc61ca06大部分都试了一遍 Redis 数据结构简介 Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。下面来对这5种数据结构类型作简单的介绍: 结构类型 结构存储的值 结构的读写能力 String 可以是字符串、整数或者浮点数 对整个字符串或者字符串的其中一部分执行操作;对象和浮点数执行自增(increment)或者自减(decrement) List 一个链表,链表上的每个节点都包含了一个字符串 从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪(trim);读取单个或者多个元素;根据值来查找或者移除元素 Set 包含字符串的无序收集器(unorderedcollection),并且被包含的每个字符串都是独一无二的、各不相同 添加、获取、移除单个元素;检查一个元素是否存在于某个集合中;计算交集、并集、差集;从集合里卖弄随机获取元素 Hash 包含键值对的无序散列表 添加、获取、移除单个键值对;获取所有键值对

oc _属性

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-19 03:56:23
// main.m // OC04_属性 // // Created by dllo on 15/7/17. // Copyright (c) 2015年 cml. All rights reserved. // #import <Foundation/Foundation.h> #import "Person.h" #import"Student.h" #import "Animal.h" int main(int argc,constchar * argv[]) { // Person *per =[[Person alloc] init]; //对象通过设置器对成员变量内容进行修该 // [per setName:@"你好"]; //对象通过访问器来进行取值 // NSLog(@"%@",[per name ]); //属性一共做了三件事 // 1.声明了设置器,setter和访问器getter // 2.实现了设置器和访问器 // 3.声明了一个成员变量,成员变量命名会在属性名前面加一个下划线 //具体的数据储存,还是成员变量来完成的,属性只不过帮助程序员完成一些繁琐的工作,简化代码 // Person *per =[[Person alloc] init]; // [per hobby]; //// [per buhao]; // Student *stu=[