展开

关键词

(2)NSNumber及Tagged Pointer

今天早上有朋友问NSNumber为啥占用8个字节(64bit),请看NSNumber头文件,发现如下代码:@property (readonly) char charValue;@property (readonly 我们先做几个试验:NSNumber *number1 = ;NSNumber *number2 = ;NSNumber *number3 = ;NSNumber *number4 = ;NSLog(@n 的值所以苹果确实是将值直接存在了指针本身当中了Google上发现一张NSNumber的内存图,很形象:? 在64位系统中,如果我们真正使用一个指针来存储NSNumber实例,那么我们首先需要一个8字节的指针,另外需要一块内存存储NSNumber实例,这通常又是8字节。这样的内存开销是比较大的。 苹果对于NSNumber和NSDate对象,改成了用Tagged Pointer来存储,简单来说,Tagged Pointer是一个假的指针,它的值不再是另一个地址,而就是对应变量的值。

33150

Objective-C 实现两个NSNumber的加法

实现一个类方法: #import Adder.h @implementation Adder+(NSNumber*)add:(NSNumber *)one and:(NSNumber *)anotherNumber { return + ];}@end 测试: #import #import Adder.h int main(int argc, const char * argv; NSNumber* anotherNumber = ; NSNumber* result = ; NSLog(@The Result Is : %@, result); } return 0;}

27740
  • 广告
    关闭

    11.11智惠云集

    2核4G云服务器首年70元,还有多款热门云产品满足您的上云需求

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    iOS - 老生常谈内存管理(五):Tagged Pointer

    在引入 Tagged Pointer 技术之前 NSNumber等对象存储在堆上,NSNumber的指针中存储的是堆中NSNumber对象的地址值。 从内存占用来看 基本数据类型所需的内存不大。 但总不能弃用NSNumber对象而改用基本数据类型吧。 从效率上来看 为了使用一个NSNumber对象,需要在堆上为其分配内存,还要维护它的引用计数,管理它的生命周期,实在是影响执行效率。 NSNumber等对象的指针中存储的数据变成了Tag+Data形式(Tag为特殊标记,用于区分NSNumber、NSDate、NSString等对象类型;Data为对象的值)。 NSNumber *number1 = @1; NSNumber *number2 = @2; NSNumber *number3 = @79; NSNumber *number4 = @(0xFFFFFFFFFFFFFFFF 后面的011是类标识位,对应十进制为3,表示NSNumber类。

    67160

    OC知识--Foundation框架详尽总结之『数字、结构体、日期、文件类』

    1.数字类(NSNumber)1. NSNumber的创建以前NSNumber的创建方式- (NSNumber *)numberWithInt:(int)value;- (NSNumber *)numberWithDouble:(double NSNumber *ageN = ;NSNumber *numberN = ;NSNumber *valueN = ;现在NSNumber的创建方式@10;@5.1;@YES;@(num);示例NSNumber *ageN = @10;NSNumber *numberN = @5.1;NSNumber *valueN = @6;NSNumber *flag = @YES;3. NSNumber判断大小判断两个数相等- (BOOL)isEqualToNumber:(NSNumber *)number; NSNumber *num1 = @10;NSNumber *num2 =

    20940

    iOS开发之CoreSpotlight框架的应用

    *supportsPhoneCall;是否支持导航 必须先设置经纬度信息@property(nullable, strong) NSNumber *supportsNavigation; ------ *pixelHeight;图片高度@property(nullable, strong) NSNumber *pixelWidth;像素总数@property(nullable, strong) NSNumber ) NSNumber *audioBitRate;组织信息@property(nullable, copy) NSArray *organizations;创建者@property(nullable, *altitude;经度@property(nullable, strong) NSNumber *latitude;纬度@property(nullable, strong) NSNumber *longitude ;速度@property(nullable, strong) NSNumber *speed;时间戳@property(nullable, strong) NSDate *timestamp;...

    37520

    UIBarButtonItem设置Badge

    ) { ; }} Values for offseting the badge over the BarButtonItem you picked-(CGFloat) badgeOriginX { NSNumber (self, &badgeOriginXKey); return number.floatValue;} -(void) setBadgeOriginX:(CGFloat)badgeOriginX{ NSNumber badgeOriginXKey, number, OBJC_ASSOCIATION_RETAIN_NONATOMIC); if (self.badge) { ; }} -(CGFloat) badgeOriginY { NSNumber self.badge) { ; }} In case of numbers, remove the badge when reaching zero-(BOOL) shouldHideBadgeAtZero { NSNumber shouldAnimateBadgeKey); return number.boolValue;}- (void)setShouldAnimateBadge:(BOOL)shouldAnimateBadge{ NSNumber

    22010

    iOS:JSON转OC属性小工具 原

    *latitude; @property(nonatomic,strong)NSNumber*longitude; @end @protocol Fields @end @interface Fields *id; @property(nonatomic,strong)NSNumber*message_price; @property(nonatomic,strong)NSArray*photo_sets *role_open; @property(nonatomic,strong)NSString*sid; @property(nonatomic,strong)NSNumber*status; @property ,strong)NSArray*videos; @property(nonatomic,strong)NSNumber*world_open; @end @protocol MyObject @end @interface MyObject : JSONModel @property(nonatomic,strong)NSNumber*code; @property(nonatomic,strong)

    32320

    金额跳动动画效果

    贴代码方便大家看看 通过 runtime 建立属性(settergetter方法)** 由于分类中要添加属性,所以通过runtime方法来实现 *- (void)setAnimatedNumber:(NSNumber objc_setAssociatedObject(self, animatedNumber, animatedNumber, OBJC_ASSOCIATION_RETAIN_NONATOMIC);} - (NSNumber *)valueString { return objc_getAssociatedObject(self, valueString);}变量初始化以及定时器- (void)dw_setNumber:(NSNumber changeAnimation:(NSTimer *)timer{ NSMutableDictionary *info = timer.userInfo; int begin = (int); int end = ((NSNumber *)).intValue; int range = ((NSNumber *)).intValue; NSNumberFormatter *formatter = init]; ; ; ; int

    19330

    iOS开发--服务器返回的数据解析

    user_names : }JSON数据(NSData) -> OC对象(Foundation Object){} -> NSDictionary @{}jack -> NSString @jack15 -> NSNumber @1012.5 -> NSNumber @10.5true -> NSNumber @1false -> NSNumber @0null -> NSNull?

    64710

    Cocoa内存管理的简单规则

    例子 在接口中定义了一个实例变量@interface Counter : NSObject{ NSNumber *count;}在实现中加入accessor方法- (NSNumber *)count{ - (void)dealloc{ ; ;}假设我们需要一个重置count的值的方法,我们有两个选择便捷构造方法convenience constructor- (void)reset{ NSNumber *zero = ; ;}使用-alloc方法- (void)reset{ NSNumber *zero = initWithInt:0]; ; ;}常见错误下面的问题在一些简单的环境下可能会正常工作 没有使用accessor方法- (void)reset{ NSNumber *zero = initWithInt:0]; count = zero;}变量没有释放- (void)reset{ NSNumber 已经释放内存的变量再次调用release- (void)reset{ NSNumber *zero = ; ; ;}这将导致当你第一次访问count的时候发生错误。

    10510

    iOS 监听键盘

    keyboardWasShown:(NSNotification *) note{ 获取位置和大小 CGRect keyboardBounds;    getValue: &keyboardBounds]; NSNumber *duration = ; NSNumber *curve = ;    keyboardBounds = ; 获取位置和大小 CGRect containerFrame = _menuView.frame _menuView.frame = containerFrame;    }];}键盘消失通知- (void) keyboardWasHidden:(NSNotification *) note{ NSNumber *duration = ; NSNumber *curve = ; 获取位置和大小 CGRect containerFrame = _menuView.frame;    containerFrame.origin.y

    5630

    iOS 之-富文本 (NSAttributedString)

    NSBackgroundColorAttributeName 设置字体所在区域背景颜色,取值为 UIColor对象,默认值为nil, 透明色 NSLigatureAttributeName 设置连体属性,取值为NSNumber 设置下划线,取值为 NSNumber 对象(整数),枚举常量 NSUnderlineStyle中的值,与删除线类似 NSUnderlineColorAttributeName 设置下划线颜色,取值为 (float),正值上偏,负值下偏 NSObliquenessAttributeName 设置字形倾斜度,取值为 NSNumber (float),正值右倾,负值左倾 NSExpansionAttributeName 设置文本横向拉伸属性,取值为 NSNumber (float),正值横向拉伸文本,负值横向压缩文本 NSWritingDirectionAttributeName 设置文字书写方向,从左向右书写或者从右向左书写 NSVerticalGlyphFormAttributeName 设置文字排版方向,取值为 NSNumber 对象(整数),0 表示横排文本,1 表示竖排文本 NSLinkAttributeName

    1.3K60

    Objective-C中的语法糖

    dictionary = @{ @key0 : @value0, @key1 : @value1, @key2 : @value2 }; NSLog(@key2 => %@, dictionary);   3.对NSNumber numberWithFloat : (float) value; ​ ​ ​ ​ ​+(id) numberWithBool : (BOOL) value;  我们也可以这样做,说明:在char转换为NSNumber 是存的是ASCII码的形式,c输出为97 NSNumber的简化 NSNumber *a = @123; NSNumber *b = @11.2; NSNumber *c = @(a); NSLog(@

    33650

    OC基础--数据类型与表达式

    封装方法+ (NSNumber *)numberWithChar:(char)value;+ (NSNumber *)numberWithUnsignedChar:(unsigned char)value ;+ (NSNumber *)numberWithShort:(short)value;+ (NSNumber *)numberWithUnsignedShort:(unsigned short)value ;+ (NSNumber *)numberWithInt:(int)value;+ (NSNumber *)numberWithUnsignedInt:(unsigned int)value;+ (NSNumber *)numberWithLong:(long)value;+ (NSNumber *)numberWithUnsignedLong:(unsigned long)value; 解封方法- (char)

    16130

    iOS之NSAttributedString-------字符属性

    5> NSLigatureAttributeName(连字符)该属性所对应的值是一个 NSNumber 对象(整数)。连体字符是指某些连在一起的字符,它们采用单个的图元符号。0 表示没有连体字符。 6> NSKernAttributeName(字间距)该属性所对应的值是一个 NSNumber 对象(整数)。字母紧排指定了用于调整字距的像素点数。字母紧排的效果依赖于字体。 7> NSStrikethroughStyleAttributeName(删除线)该属性所对应的值是一个 NSNumber 对象(整数)。 8> NSUnderlineStyleAttributeName(下划线)该属性所对应的值是一个 NSNumber 对象(整数)。 12> NSVerticalGlyphFormAttributeName(横竖排版)该属性所对应的值是一个 NSNumber 对象(整数)。0 表示横排文本。1 表示竖排文本。

    49780

    使用Python编写iOS原生应用的框架设计思考(首篇) 原

    *left;@property (nonatomic, strong) NSNumber *top;@property (nonatomic, strong) NSNumber *width;@property (nonatomic, strong) NSNumber *height;@property (nonatomic, strong) NSNumber *font_size; @property (nonatomic left.floatValue, self.frame.origin.y, self.frame.size.width, self.frame.size.height);} - (void)setTop:(NSNumber self.frame.origin.x, top.floatValue, self.frame.size.width, self.frame.size.height);} - (void)setWidth:(NSNumber color; self.textColor = ;} - (void)setT:(NSString *)t { _t = t; self.text = t;} - (void)setFont_size:(NSNumber

    66530

    iOS开发之UIRefreshControl使用踩坑

    doubleClickTab:(NSNotification *)notification{ 这里有个坑 就是直接用NSInteger接收会有问题 数字不对 因为上个界面传过来的时候封装成了对象,所以用NSNumber 接收后再取值 NSNumber *index = notification.object; if ( == 1) { 刷新 ; } }此时的效果如下,直接下拉刷新可以,但是点击TabBar不可以:? doubleClickTab:(NSNotification *)notification{ 这里有个坑 就是直接用NSInteger接收会有问题 数字不对 因为上个界面传过来的时候封装成了对象,所以用NSNumber 接收后再取值 NSNumber *index = notification.object; if ( == 1) { 刷新 animated不要为YES,否则菊花会卡死 ; ; ; } }最终效果:?

    616100

    OC学习1——基本数据类型

    OC中提供了NSValue、NSNumber来封装C语言的基本类型,这样我们就可以让他们具有面向对象的特征了。 NSValue是NSNumber的父类,NSValue代表一个更通用的包装类,它可以用于单个的short、int、float、char、指针、对象id等数据项,通过该包装类就可以把short、int、float NSNumber是更具体的包装类,主要用于包装C语言的各种数值类型,NSNumber主要包括3类方法: + numberWithXxx:该类方法直接将特定类型的值包装成NSNumber。 - initWithXxx:该实例方法需要先创建一个NSNumber对象,再用一个基本类型来初始化NSNumber。- xxxValue:该实例方法返回该NSNumber对象包装的基本类型的值。

    90040

    强大的高颜值iOS图表框架AAChartKit,支持柱状图、条形图、折线图、曲线图...

    AAChartModel, NSString *, title) 标题文本内容AAPropStatementAndPropSetFuncStatement(strong, AAChartModel, NSNumber dataLabelFontColor) Datalabel font colorAAPropStatementAndPropSetFuncStatement(strong, AAChartModel, NSNumber *, xAxisGridLineWidth) x 轴网格线的宽度AAPropStatementAndPropSetFuncStatement(strong, AAChartModel, NSNumber *, yAxisLineWidth) y y-axis line widthAAPropStatementAndPropSetFuncStatement(strong, AAChartModel, NSNumber *, yAxisMax) y 轴最大值AAPropStatementAndPropSetFuncStatement(strong, AAChartModel, NSNumber *, yAxisMin

    1.4K11

    iOS - 关于 KVC 的一些总结

    然后将结果以NSNumber实例返回。 计算上表中 amount 的平均值。 @count 计算集合中的元素个数,以NSNumber实例返回。 计算 transactions 集合中的元素个数。 然后将结果以NSNumber实例返回。 计算上表中 amount 的总和。NSNumber *amountSum = ; amountSum 的结果为 $ 5935.00。 拓展 如果集合中的对象都是NSNumber,右键路径可以用self。 NSArray *array = @; NSNumber *sum = ; NSLog(@%d,); 5. 如果取到的值是一个NSNumber支持的数据类型,则将其存储在NSNumber实例并返回。  如果取到的值不是一个NSNumber支持的数据类型,则转换为NSValue对象, 然后返回。

    55110

    扫码关注云+社区

    领取腾讯云代金券