//
// 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;
}
分享到:
相关推荐
NSValue 可以弱引用保存一个对象,我们可以使用这种方法间接的引用。 NSValue *value = [NSValue valueWithNonretainedObject:@selector(class)]; [array addObject:value]; 2. 使用 NSPointerArray,NSMapTable,...
用法 在需要的地方包含扩展类别文件: #include "CCDrawNode+Bezier.h" 准备一组要绘制的点并将它们绘制到CCDrawNode : NSArray *test = @[ [NSValue valueWithCGPoint:ccp(50,100)], [NSValue ...
用法 简单的例子: 添加教程序列(与上面 gif 中使用的相同) // Set up in the AppDelegate (but could be anywhere really) NSValue *msgPoint = [ NSValue valueWithCGPoint: CGPointMake ( self .window....
DHS散点图 用于在iOS和OS X上基于属性驱动的简单散点... 要绘制的数据以NSValue对象数组的NSValue提供, NSValue对象包装了包含要绘制的(x,y)坐标的CGPoint结构。 DHScatterGraphView *scatterGraph = [[DHScatterG
使用这个扩展非常简单,只需要给UILabel对象调用`addTextTapActionForRanges:handler:`方法,传入需要响应点击的NSRange数组和处理点击的block即可: ```objc NSArray *ranges = @[[NSValue valueWithRange:...
**1.3 使用`initWithString:`方法提升速度** ```objective-c NSString *astring = [[NSString alloc] initWithString:@"This is a String!"]; NSLog(@"astring: %@", astring); [astring release]; ``` 这种方法比先...
本文将深入探讨`CAGradientLayer`的使用方法,包括其基本概念、属性设置、创建方法以及实际应用示例。 一、基本概念 `CAGradientLayer`是苹果提供的Core Animation框架中的一个类,它继承自`CALayer`。`CALayer`是...
- NSValue类:说明了如何使用NSValue类来表示其他值,如结构体或C语言数据类型。 - 判断对象等价性:介绍了如何判断两个对象是否相等。 - nil的操作:解释了在Objective-C中nil的特殊行为和用途。 2. iOS特定...
这在保存和恢复用户界面状态时特别有用,例如,当应用退出或进入后台时,可以使用这些方法来保存当前界面的状态,并在下次启动时恢复。 ##### 3. NSIndexPath UIKit Additions NSIndexPath主要用于表示表格视图或...
本讲座深入探讨了Objective-C编程语言的关键概念,包括方法(类和实例)、实例变量、属性、动态绑定、内省、nil与BOOL,以及Foundation框架中的核心类如NSObject、NSString、NSMutableString、NSNumber、NSValue、...
UIKit Framework Reference文档是开发iOS和tvOS应用时不可或缺的工具,它详细地介绍了这些类的使用方法、属性和实例方法,帮助开发者构建出功能强大且用户友好的应用程序。无论是初学者还是经验丰富的开发者,都能够...
使用方法: 导入头文件: #import 调用sharedInstance和showTutorialWithFramesAndStringsBlock:completion:方法: [[ATTutorialController sharedInstance] showTutorialWithFramesAndStringsBlock:^NSArray *...
UIView的动画通常通过`UIView.animate(withDuration:animations:)`方法实现,它适合处理视图层级上的变化,且易于理解和使用。在"UIView_animate"的示例中,可能包含了如何使用`UIView.animate(withDuration:...
通过查看和运行这个示例,开发者可以更直观地理解`CAKeyframeAnimation`的使用方法和晃动效果的实现细节。 总结来说,`CAKeyframeAnimation`是iOS开发中实现复杂动画的重要工具,而通过合理设置关键帧和属性,我们...
1. UICollectionViewFlowLayout子类化:为了自定义线性布局,我们需要继承UICollectionViewFlowLayout并重写其方法,如`- (NSArray<NSValue *> *)layoutAttributesForElementsInRect:(CGRect)rect`和`- ...
例如,我们可以使用`animate(withDuration:animations:)`方法来实现视图淡入淡出的效果: ```swift UIView.animate(withDuration: 0.3) { self.view.alpha = 0 // 淡出 } ``` 当需要更复杂、更定制化的动画时,...