首页
学习
活动
专区
工具
TVP
发布

ShaoYL

专栏作者
123
文章
146974
阅读量
39
订阅数
iOS Block的本质(四)
typedef void (^Block)(void); struct __block_impl { void *isa; int Flags; int Reserved; void *FuncPtr; }; struct __main_block_desc_0 { size_t reserved; size_t Block_size; void (*copy)(void); void (*dispose)(void); }; struct __Block_byref_age_0 { void *__isa; struct __Block_byref_age_0 *__forwarding; int __flags; int __size; int age; }; struct __main_block_impl_0 { struct __block_impl impl; struct __main_block_desc_0* Desc; struct __Block_byref_age_0 *age; // by ref }; int main(int argc, const char * argv[]) { @autoreleasepool { __block int age = 10; Block block = ^{ age = 20; NSLog(@"age is %d",age); }; block(); struct __main_block_impl_0 *blockImpl = (__bridge struct __main_block_impl_0 *)block; NSLog(@"%p",&age); } return 0; }
用户1941540
2019-02-15
6520
iOS Category 添加属性实现原理 - 关联对象
typedef OBJC_ENUM(uintptr_t, objc_AssociationPolicy) { OBJC_ASSOCIATION_ASSIGN = 0, // 指定一个弱引用相关联的对象 OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, // 指定相关对象的强引用,非原子性 OBJC_ASSOCIATION_COPY_NONATOMIC = 3, // 指定相关的对象被复制,非原子性 OBJC_ASSOCIATION_RETAIN = 01401, // 指定相关对象的强引用,原子性 OBJC_ASSOCIATION_COPY = 01403 // 指定相关的对象被复制,原子性 };
用户1941540
2019-02-15
3K0
iOS Category实现原理 (补充)
void call_load_methods(void) { static bool loading = NO; bool more_categories; loadMethodLock.assertLocked(); // Re-entrant calls do nothing; the outermost call will finish the job. if (loading) return; loading = YES; void *pool = objc_autoreleasePoolPush(); do { // 1. Repeatedly call class +loads until there aren't any more // 1.调用类的 load 方法 while (loadable_classes_used > 0) { call_class_loads(); } // 2. Call category +loads ONCE // 2.调用分类的 load 方法 more_categories = call_category_loads(); // 3. Run more +loads if there are classes OR more untried categories } while (loadable_classes_used > 0 || more_categories); objc_autoreleasePoolPop(pool); loading = NO; }
用户1941540
2019-02-15
7640
自欺欺人的使用 NSTimer 销毁
自欺欺人的使用 NSTimer 销毁 Demo地址 1.NSTimer是要加到runloop中才会起作用。 常见的创建timer方式 // 第一种方式 @property (nonatomic , strong) NSTimer *timer; // 默认加入当前runloop的NSDefaultRunLoopMode self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerA
用户1941540
2018-06-21
4570
iOS逆向实战与工具使用(微信添加好友自动确认)
iOS逆向实战与工具使用(微信添加好友自动确认) 原文链接 源码地址 WeChatPlugin-iOS Mac OS 版微信小助手(远程控制、消息防撤回、自动回复、微信多开) 一、前言 本篇主要实现在微信上自动添加好友,从而熟悉 iOS 逆向分析的过程。 ---- 二、 工具 2.1 MacBook 软件 theos 制作 Tweak 的工具 hopper disassembler 用于静态分析 usbmuxd 端口转发,可以让我们通过usb连接手机进行ssh、lldb调试等。主要使用python-
用户1941540
2018-06-21
1.9K0
iOS 获取真机上系统动态库文件
iOS 获取真机上所有系统库文件 系统动态库文件存放真机地址(/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64) 在Mac\i
用户1941540
2018-06-21
1.5K0
iOS开发-Runtime详解
iOS开发-Runtime详解 简介 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的。比如: [receiver message]; // 底层运行时会被编译器转化为: objc_msgSend(receiver, selector) // 如果其还有参数比如: [receiver message:(id)arg...]; // 底层运行时会被编译器转化为: objc_msgSend(receiver, selec
用户1941540
2018-06-21
6850
iOS 安全
iOS 安全 众所周知的是大部分iOS代码一般不会做加密加固,因为iOS APP一般是通过AppStore发布的,而且苹果的系统难以攻破,所以在iOS里做代码加固一般是一件出力不讨好的事情。万事皆有例外,不管iOS、adr还是js,加密的目的是为了代码的安全性,虽然现在开源畅行,但是不管个人开发者还是大厂皆有保护代码安全的需求,所以iOS代码加固有了生存的土壤。下面简单介绍下iOS代码加密的几种方式。 iOS代码加密的几种方式 1.字符串加密 字符串会暴露APP的很多关键信息,攻击者可以根据从界面获取的字符
用户1941540
2018-06-21
8100
IOS开发系列—Objective-C之Foundation框架
概述 我们前面的章节中就一直新建Cocoa Class,那么Cocoa到底是什么,它和我们前面以及后面要讲的内容到底有什么关系呢?Objective-C开发中经常用到NSObject,那么这个对象到底是谁?它为什么又出现在Objective-C中间呢?今天我们将揭开这层面纱,重点分析在IOS开发中一个重要的框架Foundation,今天的主要内容有: 1. Foundation概述 2. 常用结构体 3. 日期 4. 字符串 5. 数组 6. 字典 7. 装箱和拆箱 8. 反射 9. 拷贝 10. 文件操作
用户1941540
2018-06-20
6810
iOS:KVO/KVC 的概述与使用
KVO 一,概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。 二,使用方法 系统框架已经支持KVO,所以程序员在使用的时候非常简单。 1. 注册,指定被观察者的属性, 2. 实现回调方法 3. 移除观察 三,实例: 假设一个场景,股票的价格显示在当前屏幕上,当股票价格更改的时候,实时显示更新其价格。 1.定义DataModel, [cpp] view
用户1941540
2018-05-11
1.4K0
APP上线被APPStore拒绝的各种原因
1、程序有重大bug,程序不能启动,或者中途退出。 2、绕过苹果的付费渠道,我们之前游戏里的用兑换码兑换金币。 3、游戏里有实物奖励的话,一定要说清楚,奖励由本公司负责,和苹果没有关系。 4、用到苹果的标志。(应用的设计和Apple的Logo风格太像了也会被拒) 5、网络功能不能正常访问。 6、图标不能点击,不能点击的图标要置灰,或者直接隐藏。 7、没有设置default页,启动画面为黑屏,有一定概率被拒绝。 8、一个应用在线,但你想在发一个豪华版之类的,再开一个应用也会被拒绝。 9、用了著名游戏的关键字
用户1941540
2018-05-11
1.7K0
iOS设计模式——Category和 Extension
什么是Category Category模式用于向已经存在的类添加方法从而达到扩展已有类的目的,在很多情形下Category也是比创建子类更优的选择。新添加的方法同样也会被被扩展的类的所有子类自动继承。当知道已有类中某个方法有BUG,但是这个类是以库的形式存在的,我们无法直接修改源代码的时候,Category也可以用于替代这个已有类中某个方法的实体,从而达到修复BUG的目的。然而却没有什么便捷的途径可以去调用已有类中原有的那个被替换掉方法实体了。需要注意的是,当准备有Category来替换某一个方法的时候,
用户1941540
2018-05-11
9170
iOS-UI控件之UITableView(二)- 自定义不等高的cell
不等高的cell 给模型增加frame数据 所有子控件的frame cell的高度 @interface XMGStatus : NSObject /**** 文字\图片数据 ****/ // ..... /**** frame数据 ****/ /** 头像的frame */ @property (nonatomic, assign) CGRect iconFrame; // ..... /** cell的高度 */ @property (nonatomic, assign) CGFloat cellHe
用户1941540
2018-05-11
9290
Autolayout
Autolayout Autolayout是一种“自动布局”技术,专门用来布局UI界面的 Autolayout自iOS6开始引入,由于Xcode4的不给力,当时并没有得到很大推广自iOS7(Xcode5)开始,Autolayout的开发效率得到很大的提升 苹果官方也推荐开发者尽量使用Autolayout来布局UI界面 Autolayout能很轻松地解决屏幕适配的问题 Autolayout的2个核心概念 参照 约束 与 Autoresizing 区别 在Autolayout之前,有Autoresizing可以
用户1941540
2018-05-11
9000
iOS游戏开发之UIDynamic
iOS游戏开发之UIDynamic 简介 什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象重力、弹性碰撞等现象 物理引擎的价值 广泛用于游戏开发,经典成功案例是“愤怒的小鸟” 让开发人员可以在远离物理学公式的情况下,实现炫酷的物理仿真效果 提高了游戏开发效率,产生更多优秀好玩的物理仿真游戏 知名的2D物理引擎 Box2d Chipmunk 使用步骤 要想使用UIDynamic来实现物理仿
用户1941540
2018-05-11
8830
iOS之NSAttributedString-------字符属性
NSAttributedString 字符属性 字符属性可以应用于 attributed string 的文本中。 NSString *const NSFontAttributeName;(字体) NSString *const NSParagraphStyleAttributeName;(段落) NSString *const NSForegroundColorAttributeName;(字体颜色) NSString *const NSBackgroundColorAttributeNam
用户1941540
2018-05-11
1.1K0
iOS-UI控件之UITableView(四)- cell数据刷新
TableView- 数据刷新 数据刷新 添加数据 删除数据 更改数据 全局刷新方法(最常用) [self.tableView reloadData]; // 屏幕上的所有可视的cell都会刷新一遍 局部刷新方法 添加数据 NSArray *indexPaths = @[ [NSIndexPath indexPathForRow:0 inSection:0], [NSIndexPath indexPathForR
用户1941540
2018-05-11
1.7K0
iOS-UI控件之UITableView(三)- 自定义不等高的cell
Storyboard_不等高 对比自定义等高cell,需要几个额外的步骤(iOS8开始才支持) 添加子控件和contentView之间的间距约束 设置tableViewCell的真实行高和估算行高 // 告诉tableView所有cell的真实高度是自动计算(根据设置的约束来计算) self.tableView.rowHeight = UITableViewAutomaticDimension; // 告诉tableView所有cell的估算高度 self.tableView.estimated
用户1941540
2018-05-11
8330
iOS---UICollectionView自定义流布局实现瀑布流效果
自定义布局,实现瀑布流效果 自定义流水布局,继承UICollectionViewLayout 实现一下方法 // 每次布局之前的准备 - (void)prepareLayout; // 返回所有的尺寸 - (CGSize)collectionViewContentSize; // 返回indexPath这个位置Item的布局属性 - (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)
用户1941540
2018-05-11
2K0
iOS-SQLite(FMDB)
在已经存在的表中,添加字段,更新表结构 /** Test to see if particular column exists for particular table in database @param columnName The name of the column. @param tableName The name of the table. @return `YES` if column exists in table in question; `NO` otherwise.
用户1941540
2018-05-11
7450
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档