ios开发取余,为什么要学IOS开发

iOS 函数、指数、对数、取整、取余、绝对数等

1、 三角函数 

成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站建设、做网站、古浪网络推广、微信小程序、古浪网络营销、古浪企业策划、古浪品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供古浪建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com

double sin (double);正弦 

double cos (double);余弦 

double tan (double);正切 

2 、反三角函数 

double asin (double); 结果介于[-PI/2, PI/2] 

double acos (double); 结果介于[0, PI] 

double atan (double); 反正切(主值), 结果介于[-PI/2, PI/2] 

double atan2 (double, double); 反正切(整圆值), 结果介于[-PI, PI] 

3 、双曲三角函数 

double sinh (double); 

double cosh (double); 

double tanh (double); 

4 、指数与对数 

double exp (double);求取自然数e的幂 

double sqrt (double);开平方 

double log (double); 以e为底的对数 

double log10 (double);以10为底的对数 

double pow(double x, double y);计算以x为底数的y次幂 

float powf(float x, float y); 功能与pow一致,只是输入与输出皆为浮点数 

5 、取整 

double ceil (double); 取上整 

用法:向上取整ceil(3.123333)=4 ceilf(3.123333)=4

double floor (double); 取下整 

用法:  向下取整 floor(3.123333)=3

6 、绝对值 

double fabs (double);求绝对值 

double cabs(struct complex znum) ;求复数的绝对值 

7 、标准化浮点数 

double frexp (double f, int *p); 标准化浮点数, f = x * 2^p, 已知f求x, p ( x介于[0.5, 1] ) 

double ldexp (double x, int p); 与frexp相反, 已知x, p求f 

8 、取整与取余 

double modf (double, double*); 将参数的整数部分通过指针回传, 返回小数部分 

用法:两数整除之后的余数fmod(9, 8)=1.00

double fmod (double, double); 返回两参数相除的余数 

用法:double x, fractpart, intpart;

    x = 8.123456;

    fractpart = modf(x, intpart);

整数部分 = 8.000000

小数部分 = 0.123456

9 、其他 

double hypot(double x, double y);已知直角三角形两个直角边长度,求斜边长度 

double ldexp(double x, int exponent);计算x*(2的exponent次幂) 

double poly(double x, int degree, double coeffs [] );计算多项式 

nt matherr(struct exception *e);数学错误计算处理程序

原作者链接:

ios 开发若干技巧

1.定义函数时,希望传入的参数不为nil,或者为nil时会有警告显示:

如下:

- (instanceype)initWithFoo:(NSString *)foo bar:(NSString *)bar sark:(NSString *)sark

__atttribute__((nonnull(1, 2)));

p.s. index从1开始,不是0,且只对对象生效。

该技巧同样来自,sunnyxx大神的微信,逗比狗~

2.定义函数时,希望子类override该方法时候,必须调用super,否则编译器直接报错。

@interface OldSix:NSObject

- (void)fooWithNothing __attribute__((objc_requires_super));

该技巧同样来自,sunnyxx大神的微信,逗比狗~

wait~~~~~

/*检查子类在重写该方法时有没有调用自己(父类)的实现

*对于一些可以被继承的类,需要子类在重某一调用父类的实现以保证正确的行为,通过在头文件方法的声明末尾添加`NS_REQUIRES_SUPER`

*可以让编译器检查子类方法有调用父类的实现。具体使用方法如下:

* - (void)viewWillAppear:(BOOL)animated NS_REQUIRES_SUPER;

*/

但是根据我的实际测试,发现sunnyxx大神仙的方法,没有任何显示效果,不知道是不是我打开的方式不对还是怎么,

总之,NS_REQUIRES_SUPER的方法亲测可用。

3.误删系统sdk头文件的解决办法

在终端中输入:

$ cd ~/Library/Developer/Xcode/DerivedData/ModuleCache/

$ rm -rf *

4.ARC下打印retainCount

extern uintptr_t _objc_rootRetainCount(id obj);

id test = [NSString new];

NSLog(@"retain count %lu",_objc_rootRetainCount(test));

5.工程报错下,仍然可以编译成功

6.定位方法的调用者

iOS 中常用的几种函数 (向上,向下,四舍五入)取整

2.高斯函数,向下取整

floor(1.0/4)=0;

floor(4.0/4)=1;

floor(5.0/4)=1;

floor(8.0/4)=2;

floor()方法是向下取整,类似于数学中的高斯函数 [].取得不大于浮点数的最大整数,对于正数来说是舍弃浮点数部分,对于复数来说,舍弃浮点数部分后再减1.

3.ceil函数,向上取整。

如:

ceil(1.0/4)=1;

ceil(4.0/4)=1;

ceil(5.0/4)=2;

ceil(8.0/4)=2;

ceil()方法是向上取整, 括号内是double类型

这两个函数都是math.h库里面的,直接使用就行,ios不需要再次倒入头文件,类似这个数学函数还有很多,如

1、 三角函数

double sin (double); 正弦

double cos (double);余弦

double tan (double);正切

2 、反三角函数

double asin (double); 结果介于[-PI/2, PI/2]

double acos (double); 结果介于[0, PI]

double atan (double); 反正切(主值), 结果介于[-PI/2, PI/2]

double atan2 (double, double); 反正切(整圆值), 结果介于[-PI, PI]

3 、双曲三角函数

double sinh (double);

double cosh (double);

double tanh (double);

4 、指数与对数

double exp (double);求取自然数e的幂

double sqrt (double);开平方

double log (double); 以e为底的对数

double log10 (double);以10为底的对数

double pow(double x, double y);计算以x为底数的y次幂

float powf(float x, float y); 功能与pow一致,只是输入与输出皆为浮点数

5 、取整

double ceil (double); 取上整

double floor (double); 取下整

6 、绝对值

double fabs (double);求绝对值

double cabs(struct complex znum) ;求复数的绝对值

7 、标准化浮点数

double frexp (double f, int *p); 标准化浮点数, f = x * 2^p, 已知f求x, p ( x介于[0.5, 1] )

double ldexp (double x, int p); 与frexp相反, 已知x, p求f

8 、取整与取余

double modf (double, double*); 将参数的整数部分通过指针回传, 返回小数部分

double fmod (double, double); 返回两参数相除的余数

9 、其他

double hypot(double x, double y);已知直角三角形两个直角边长度,求斜边长度

double ldexp(double x, int exponent);计算x*(2的exponent次幂)

double poly(double x, int degree, double coeffs [] );计算多项式

nt matherr(struct exception *e);数学错误计算处理程序

iOS SideTable

下:

●spinlock_t slock : 自旋锁,用于上锁/解锁 SideTable。 ●RefcountMap refcnts :以DisguisedPtrobjc_object为key的hash表,用来存储OC对象的引用计数(仅在未开启isa优化 或 在isa优化情况下isa_t的引用计数溢出时才会用到)。 ●weak_table_t weak_table : 存储对象弱引用指针的hash表。是OC weak功能实现的核心数据结构。

除了三个成员外,苹果为SideTable还写了构造和析构函数:

// 构造函数

SideTable() {

memset(weak_table, 0, sizeof(weak_table));

}

通过析构函数可以知道,SideTable是不能被析构的。

最后是一堆锁的操作,用于多线程访问SideTable, 同时,也符合我们上面提到的StripedMap中关于value的lock接口定义:

SideTables是一个64个元素长度的hash数组,里面存储了SideTable。SideTables的hash键值就是一个对象obj的address。 因此可以说,一个obj,对应了一个SideTable。但是一个SideTable,会对应多个obj。因为SideTable的数量只有64个,所以会有很多obj共用同一个SideTable。

先来说一下最外层的SideTables。SideTables可以理解为一个全局的hash数组,里面存储了SideTable类型的数据,其长度为64。

SideTabls可以通过全局的静态函数获取:

可以看到,SideTabls 实质类型为模板类型StripedMap

可以知道, StripedMap 是一个以void *为hash key, T为vaule的hash 表。 hash定位的算法如下:

把地址指针右移4位异或地址指针右移9位,为什么这么做,也不用关心。我们只要关心重点是最后的值要取余StripeCount,来防止index越界就好。

iOS开发交流技术群: 563513413 ,不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

StripedMap的所有T类型数据都被封装到PaddedT中:

之所以再次封装到PaddedT (有填充的T)中,是为了字节对齐,估计是存取hash值时的效率考虑。

接下来,这些PaddedT被放到数组array中:

然后,苹果为array数组写了一些公共的存取数据的方法,主要是调用indexForPointer方法,使得外部传入的对象地址指针直接hash到对应的array节点:

接下来是一堆锁的操作,由于SideTabls是一个全局的hash表,因此当然必须要带锁访问。StripedMap提供了一些便捷的锁操作方法:

可以看到,所有的StripedMap锁操作,最终是调用的array[i].value的相关操作。因此,对于模板的抽象数据T类型,必须具备相关的lock操作接口。

因此,要用StripedMap作为模板hash表,对于T类型还是有所要求的。而在SideTables中,T即为SideTable类型,我们稍后会看到SideTable是如何符合StripedMap的数据类型要求的。


网站栏目:ios开发取余,为什么要学IOS开发
文章链接:http://myzitong.com/article/dsdissg.html