前言 做iOS开发有3年了,从当初的小白到现在,断断续续看过很多资料,之前也写过一些博文来记录,但是感觉知识点都比较凌乱。...本系列的所有博文集合参见:iOS开发知识梳理博文集。本文主要介绍 OC基础--数据类型与表达式。...还拓展了一些新的数据类型如BOOL、NSInteger、NSString、CGFloat、id、instancetype等。...//封装 + (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type; //解封 - (void)getValue.../* Points. */ struct CGPoint { CGFloat x; CGFloat y; }; typedef struct CG_BOXABLE CGPoint CGPoint
iOS开发CoreGraphics核心图形框架之一——CGPath的应用 一、引言 CoreGraphics核心图形框架相较于UIKit框架更加偏于底层。...在Objective-C工程中,CoreGraphics其中方法都是采用C语言风格进行编写的,同时其并不支持Objective-C的自动引用计数,在使用这个框架进行编程时,开发者要手动对内存进行管理。...CGPath可以理解为图形的路径,在Objective-C工程中,其实系统定义的一个内部结构体,开发者不可以直接使用,开发者CGPathRef和CGMutablePathRef别名作为CGPath的引用...* m, CGFloat x, CGFloat y); //将路径移动到某个点画出一条线 void CGPathAddLineToPoint(CGMutablePathRef path,const...(CGMutablePathRef path,const CGAffineTransform * m, CGFloat cpx, CGFloat cpy,CGFloat x, CGFloat y); /
Swift中的”宏” 写Objective-C的时候常常会用到各种宏定义,但是Swift中貌似没有宏的这种定义,更多的是通过全局常量或者全局函数来实现这一效果.我们只需要建立一个文件(假设为Const.swift...UIScreen.mainScreen().bounds.size.height /** * 除了一些简单的属性直接用常量表达,更推荐用全局函数来定义替代宏 */ // 判断系统版本 func kIS_IOS7...->Bool { return (UIDevice.currentDevice().systemVersion as NSString).doubleValue >= 7.0 } func kIS_IOS8...UIDevice.currentDevice().systemVersion as NSString).doubleValue >= 8.0 } // RGBA的颜色设置 func kRGBA (r:CGFloat..., g:CGFloat, b:CGFloat, a:CGFloat) -> UIColor { return UIColor(red: r/255.0, green: g/255.0, blue
const定义的常量,在程序运行时在常量表中,系统为它分配内存。 ●define定义的常量,预处理时只是直接进行了替换。所以编译时不能进行数据类型检验。...const定义的常量,在编译时进行严格的类型检验,可以避免出错。 ●const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。...●define可以定义一些简单的函数,const不可以 ●有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试
www.cnblogs.com/ludashi/p/4826818.html 上篇博客的实例是自带的UICollectionViewDelegateFlowLayout布局基础上来做的Demo, 详情请看《iOS...Objective-C /** * 求CellY数组中的最大值并返回 */ - (CGFloat) maxCellYArrayWithArray: (NSMutableArray *...Objective-C /** * 求CellY数组中的最小值的索引 */ - (CGFloat) minCellYArrayWithArray: (NSMutableArray *...demo地址 如果您是iOS开发者,或者对本篇文章感兴趣,请关注本人,后续会更新更多相关文章!敬请期待!...参考文章: iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流
通过分析对象的本质得知实例对象的isa指向类对象,那类对象的isa呢,我们接下来就对 isa 的流程进行分析。
例子:李明杰/iOS开发进阶视频教程/23-再次重构.mp4/00:10:30 12.protocol 协议 1.协议的定义 @protocol 协议名称 // 方法声明列表
在iOS开发中经常遇到一些字段和类型的定义,例如配置生产和测试不同环境的参数等,这时候经常用到#define、const以及typedef。那么它们之间有什么区别呢?我们接下来一个一个具体了解下。...dispatch_once(&onceToken, ^{\ _gInstance = [C new];\ });\ return _gInstance;\ } 关于#define的其他用法可以参见后面这篇博文:iOS...1.2、const 关键字const用来定义常量,如果一个常量被const修饰,那么他的值就不能被改变。...//iOS底层源码就是对NSInteger进行了一个别名的设置,其表示的就是long或者int类型。 #if __LP64__ || (TARGET_OS_EMBEDDED && !...unsigned long NSUInteger; #else typedef int NSInteger; typedef unsigned int NSUInteger; #endif 在iOS
博客地址 : http://blog.csdn.net/shulianghan/article/details/41624613
在 iOS 开发中,JavaScriptCore 框架支持 JS 与 OC 直接互相调用,从而实现动态化方案。...框架简介 ---- JavaScriptCore 框架是苹果在 iOS7 引入的一个框架,该框架让 Objective-C 和 JavaScript 代码 互通,即支持在 Objective-C 中执行...JavaScriptCore 是苹果Safari 浏览器的 JavaScript 引擎,而JavaScriptCore框架是基于 Objective-C 实现了对 JavaScriptCore 的封装,...提供了Objective-C 接口,让开发者能够在在iOS App 中处理 JavaScript 脚本。...: ((CGFloat)((hexValue & 0xFF0000) >> 16)) / 255.0 green : ((CGFloat)((hexValue & 0xFF00) >> 8)) / 255.0
坏习惯的开端 初写iOS时,我做的是把原项目从Android端移植到iOS端。因为涉及到不同语言,又因为不熟悉iOS,加上还要与用C写的网络库进行纠缠,我小心翼翼的用了基本数据类型完成大多数编码。...能用int就坚决不用NSInteger,能用float就坚决不用CGFloat。你可能会问,虽然这个过程用到的语言很杂,写Objective-C的时候就大胆的用Foundation的数据类型呗。...想法很好,只是当时我看不懂我们网络库实现原因不敢乱改代码,怕伤着哪个地方的逻辑,最后代码移着移着,我的.m文件就变成了.mm文件——对,变成Objective-C和C++混编代码了。...现在想想我入门iOS的过程真是坎坷呢,留下了一堆烂毛病。 不过好在我现在开始拼命的多看资料,一点点把走的弯路走回来。...#endif /* Definition of the `CGFloat' type and `CGFLOAT_DEFINED'. */ typedef CGFLOAT_TYPE CGFloat;
概述 在iOS开发中,经常用到宏定义,或用const修饰一些数据类型,经常有开发者不知怎么正确使用,导致项目中乱用宏与const修饰。你能区分下面的吗?知道什么时候用吗?..."; const NSString *HSCoder = @"汉斯哈哈哈"; NSString const *HSCoder = @"汉斯哈哈哈"; NSString * const HSCoder =...const的用法 const修饰符定义的变量是不可变的,比如说你需要定义一个动画时间的常量,你可以这么做: static const NSTimeInterval kAnimateDuration...NSString * const kUserName = @"StrongX"; 需要注意的是const 修饰的是他右边的部分,也就是说: static NSString const * kUserName...= static NSString const (* kUserName ) static NSString * const kUserName = static NSString * const
这几个月中,我一边学习着如何避免写出 Objective-C 风格的 Swift 代码,一边真正开始使用这门新语言。...虽然它并不影响程序本身,但是它看起来更有点 Objective-C 范,或者... Java 范。 iOS 或 OS X 开发者能轻易说出这段代码的含义。...取值 CGRect frame = CGRectMake(0, 0, 100, 100) CGFloat width = CGRectGetWidth(frame) CGFloat height = CGRectGetHeight...(frame) CGFloat maxX = CGRectGetMaxX(frame) CGFloat maxY = CGRectGetMaxY(frame) 如果你依然是个合格的 Objective-C...作为 Objective-C 开发者,我不得不写了快两年这样的代码去修改 frame : objective-c CGRect frame = CGRectMake(0, 0, 100, 100); UIView
---- NSArray类简介 有序且只可以存储Objective-C对象的数组 初始化后,内容不可变,长度也不可变,不能进行增、删、改操作 不能存放nil (nil是标志数组的结束)...//返回以firstObj等元素生成的数组,以nil结束 便利构造器:arrayWithObjects: ---- - (instancetype)initWithObjects:(const ObjectType...v2) return NSOrderedDescending; else return NSOrderedSame; } int main(int argc, const...initWithObjects:@3,@[@"oneObject",@"twoObject"], nil]; NSLog(@"arry2_1 --> %@",arry2_1); //2.2 IOS...9.1可以用,但IOS 9.2 不可以了 // NSArray *arry2_2 = [[NSArray alloc] initWithObjects:(const id _Nonnull
Objective-C 是苹果为 iOS 和 Mac 开发量身定制的语言。它随着 iPhone 的出现而大火,直到今天国内外大多数的 App 依然是用 Objective-C 在写。...assign 主要用于修饰基本数据类型,如 NSInteger 和 CGFloat ,这些数值主要存在于栈上。 weak 一般用来修饰对象,assign 一般用来修饰基本数据类型。...关键词:#回调 在 iOS 开发中,block 和代理都是回调的方式。...同理请用 NSUInteger 替代 unsigned,CGFloat 替代 float。 属性声明时,最好遵循原子性,读写,内存管理的顺序。这样可读性更高。...但是 iOS 的编译器优化了内存分配,当两个指针指向两个值一样的 NSString 时,两者指向同一个内存地址。所以这道题会进入 if 的判断,打印出 "Equal" 字符串。
Objective-C开发中经常用到NSObject,那么这个对象到底是谁?它为什么又出现在Objective-C中间呢?...前者是框架的基础,和界面无关,其中包含了大量常用的API;后者是基础的UI类库,以后我们在IOS开发中会经常用到。这两个框架在系统中的位置如下图: ?...常用结构体 在Foundation中定义了很多常用结构体类型来简化我们的日常开发,这些结构体完全采用Objective-C定义,和我们自己定义的结构体没有任何区别,之所以由框架为我们提供完全是为了简化我们的开发...首先看一下系统对象两种归档方式(注意由于本章主要介绍Foundation内容,下面的程序是OS X命令行程序并没有创建成iOS应用,如果移植到到iOS应用下运行将NSArchiver和NSUnarchiver...虽然在Foundation部分iOS和OS X在设计上尽可能通用但是还存在着细微差别。)
键值对,并返回包含该键值对的词典对象 便利构造器:dictionaryWithObjects : forKeys : ---- - (instancetype)initWithObjects:(const...ObjectType _Nonnull [])objects forKeys:(const id _Nonnull [])keys count:(NSUInteger)count...forKeys:@[@"-1-",@"-2-",@"-3-"]]; NSLog(@"dict2 --> %@",[dict2 description]); //2.2 IOS...8可以用,但IOS 9才行被搞死了 T_T // __unsafe_unretained NSArray * _Nonnull arryObjects = @[@"one",@"two"...// NSLog(@"dict2_1 --> %@",[dict2_1 description]); //报错信息:Implicit conversion of an Objective-C
:iOS逆向内搜NSLog获取 I 自定义preprocessor macro DEBUG 宏的应用场景:区分调试模式和发布模式进行特殊处理 自定义preprocessor macro: The DEBUG...CGFloat %f or %g %f works for floats and doubles when formatting; but note the technique described below...to seconds. */ CA_EXTERN CFTimeInterval CACurrentMediaTime (void) API_AVAILABLE (macos(10.5), ios...count = 1000;//有多少个元素需要添加到数组 static size_t const iterations = 10000;//测试运行的次数 CFTimeInterval startTime...Runtime: %llu ns", t); IV demo 本文demo从小程序:iOS逆向内搜NSLog获取
下载环境 相关资源下载 : -- IOS 相关资料下载页面 : https://developer.apple.com/devcenter/ios/index.action ; -- Xcode 下载页面...创建 Objective-C 程序 进入主界面方式 : 打开 Xcode 之后, 可以使用 Xcode 菜单, 但是必须创建一个 Object-C 工程 或者 导入 一个 Object-C 工程才可以进入主界面...项目 : ios项目是为手机和平板开发的应用; -- OS X 项目 : OS X 是为 OS 操作系统创建的应用; 创建工程 : 注明 工程名, 公司名称, 类型; -- Product Name...创建 IOS 项目 打开 Xcode 并选择创建新工程 : 弹出菜单中选择 IOS --> Single View Application 工程; 填写项目信息 : -- Product Name ...a.out octopus-2:ios octopus$ .
https://juejin.im/post/5cb812386fb9a068553e1ef4 背景:这里有些关于编码风格Apple官方文档,如果有些东西没有提及,可以在以下文档来查找更多细节: The Objective-C...App Programming Guide: developer.apple.com/library/ios… 语言应该使用US英语。...NSTimeInterval const fadetime = 1.7; 属性也是使用驼峰式,但首单词的首字母小写。...想了解更多,阅读: developer.apple.com/library/ios… 。 点语法应该总是被用来访问和修改属性,因为它使代码更加简洁。[]符号更偏向于用在其他例子。...应该: static NSString * const RWTAboutViewControllerCompanyName = @"RayWenderlich.com"; static CGFloat
领取专属 10元无门槛券
手把手带您无忧上云