`
rayln
  • 浏览: 434086 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

NSValue的用法

阅读更多
//
//  main.m
//  NSValue
//
//  Created by Rayln Guan on 9/9/13.
//  Copyright (c) 2013 Rayln Guan. All rights reserved.
//

#import <Foundation/Foundation.h>

void value1(){
    //point是结构体。没办法直接放入array当中,这时候我们需要用NSValue进行包装后放入
    CGPoint point = CGPointMake(5, 10);
    NSMutableArray *arr = [NSMutableArray array];
#pragma mark 这是错误的做法,会报错!
    //[arr addObject:point];
    
#pragma mark 正确做法
    NSValue *value = [NSValue valueWithPoint:point];
    [arr addObject:value];
    //取出结构体
    NSValue *val = [arr lastObject];
    CGPoint newPoint = [val pointValue];
    NSLog(@"%f,%f", newPoint.x, newPoint.y);
    
    //比较Point成员是否相同
    CGPointEqualToPoint(point, newPoint);
}
//自定义结构体的包装
typedef struct {
    int year;
    int month;
    int day;
} Date;

void value2(){
    Date date = {2010,4,8};
    //把结构体放入NSValue中
    //根据结构体类型返回结构体类型的字符串
    char *type = @encode(Date);
    NSValue *val = [NSValue value:&date withObjCType:type];
    
    //取值
    Date result;
    [val getValue:&result];
    NSLog(@"%i", result.year);
    
    //取出类型描述字符串
    [val objCType];
}

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        value1();
        value2();
    }
    return 0;
}

分享到:
评论

相关推荐

    iOS中的集合该如何弱引用对象示例详解

    NSValue 可以弱引用保存一个对象,我们可以使用这种方法间接的引用。 NSValue *value = [NSValue valueWithNonretainedObject:@selector(class)]; [array addObject:value]; 2. 使用 NSPointerArray,NSMapTable,...

    CCDrawNode-Bezier:扩展 Cocos2D 3.x CCDrawNode 类以提供贝塞尔线绘制

    用法 在需要的地方包含扩展类别文件: #include "CCDrawNode+Bezier.h" 准备一组要绘制的点并将它们绘制到CCDrawNode : NSArray *test = @[ [NSValue valueWithCGPoint:ccp(50,100)], [NSValue ...

    TutorialKit:教程套件

    用法 简单的例子: 添加教程序列(与上面 gif 中使用的相同) // Set up in the AppDelegate (but could be anywhere really) NSValue *msgPoint = [ NSValue valueWithCGPoint: CGPointMake ( self .window....

    DHScatterGraph:在iOS和OS X上查看散点图的类

    DHS散点图 用于在iOS和OS X上基于属性驱动的简单散点... 要绘制的数据以NSValue对象数组的NSValue提供, NSValue对象包装了包含要绘制的(x,y)坐标的CGPoint结构。 DHScatterGraphView *scatterGraph = [[DHScatterG

    UILabel内容中某个文字添加点击事件

    使用这个扩展非常简单,只需要给UILabel对象调用`addTextTapActionForRanges:handler:`方法,传入需要响应点击的NSRange数组和处理点击的block即可: ```objc NSArray *ranges = @[[NSValue valueWithRange:...

    ObjectiveC 最经典最全的基础库

    **1.3 使用`initWithString:`方法提升速度** ```objective-c NSString *astring = [[NSString alloc] initWithString:@"This is a String!"]; NSLog(@"astring: %@", astring); [astring release]; ``` 这种方法比先...

    CAGradientLayer使用详细解析

    本文将深入探讨`CAGradientLayer`的使用方法,包括其基本概念、属性设置、创建方法以及实际应用示例。 一、基本概念 `CAGradientLayer`是苹果提供的Core Animation框架中的一个类,它继承自`CALayer`。`CALayer`是...

    IOS 开发总结

    - NSValue类:说明了如何使用NSValue类来表示其他值,如结构体或C语言数据类型。 - 判断对象等价性:介绍了如何判断两个对象是否相等。 - nil的操作:解释了在Objective-C中nil的特殊行为和用途。 2. iOS特定...

    UIKit 帮助文档

    这在保存和恢复用户界面状态时特别有用,例如,当应用退出或进入后台时,可以使用这些方法来保存当前界面的状态,并在下次启动时恢复。 ##### 3. NSIndexPath UIKit Additions NSIndexPath主要用于表示表格视图或...

    Lecture 3: Objective-C

    本讲座深入探讨了Objective-C编程语言的关键概念,包括方法(类和实例)、实例变量、属性、动态绑定、内省、nil与BOOL,以及Foundation框架中的核心类如NSObject、NSString、NSMutableString、NSNumber、NSValue、...

    UIKit_Framework_Reference

    UIKit Framework Reference文档是开发iOS和tvOS应用时不可或缺的工具,它详细地介绍了这些类的使用方法、属性和实例方法,帮助开发者构建出功能强大且用户友好的应用程序。无论是初学者还是经验丰富的开发者,都能够...

    一款显示操作提示的控制器

    使用方法: 导入头文件: #import 调用sharedInstance和showTutorialWithFramesAndStringsBlock:completion:方法: [[ATTutorialController sharedInstance] showTutorialWithFramesAndStringsBlock:^NSArray *...

    动画之CAAnimation和UIView

    UIView的动画通常通过`UIView.animate(withDuration:animations:)`方法实现,它适合处理视图层级上的变化,且易于理解和使用。在"UIView_animate"的示例中,可能包含了如何使用`UIView.animate(withDuration:...

    CAKeyframeAnimation动画(UILabel左右晃动)OC 版

    通过查看和运行这个示例,开发者可以更直观地理解`CAKeyframeAnimation`的使用方法和晃动效果的实现细节。 总结来说,`CAKeyframeAnimation`是iOS开发中实现复杂动画的重要工具,而通过合理设置关键帧和属性,我们...

    UICollectionView的两个实例(linelayout和circlelayout)

    1. UICollectionViewFlowLayout子类化:为了自定义线性布局,我们需要继承UICollectionViewFlowLayout并重写其方法,如`- (NSArray&lt;NSValue *&gt; *)layoutAttributesForElementsInRect:(CGRect)rect`和`- ...

    IOS视图弹出和消失的动画都非常棒

    例如,我们可以使用`animate(withDuration:animations:)`方法来实现视图淡入淡出的效果: ```swift UIView.animate(withDuration: 0.3) { self.view.alpha = 0 // 淡出 } ``` 当需要更复杂、更定制化的动画时,...

Global site tag (gtag.js) - Google Analytics