macOS/iOS API解説

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。2010年代に書かれた内容です。今後更新はありません。

目次

valueWithBytes:objCType:

INDEX>Foundation>NSValue>

NSValueオブジェクトを、値とオブジェクティブCタイプで作って返します
+(NSValue *)valueWithBytes:(const void *)value:
               objCType:(const char *)type:

解説

値オブジェクトを値とオブジェクティブCタイプで作って返します。
typeは@encode()コンパイラディレクティブで作成したものでなければなりません、C文字列でハードコーディングしてはいけません。
このメソッドはvalue:withObjCType:と同じメソッドです。

【オブジェクティブタイプ】
●@encode(NSRange) 範囲
●@encode(char *) C文字列
●@encode(int) 整数

[NSValue *value = [NSValue valueWithBytes: &aData objcType : @encode(typeof(aData) ) ];

返り値

( NSValue * )

値オブジェクト

引数

( const void * )value

( const char * )type

タイプ

クラス

NSValue

Class Methods

使用可能

10.0

参照

- initWithBytes:objCType:

例文

#import "MyObject.h"

@implementation MyObject

- (IBAction)myAction:(id)sender
{
	
	//Rangeを渡す場合
	NSRange aRange = {5, 15};
	NSValue *theValue3 = [NSValue valueWithBytes:&aRange objCType:@encode(NSRange)];
	NSRange bufferRange;
	[theValue3 getValue:&bufferRange];
	NSLog(@"---%u,%u",bufferRange.location,bufferRange.length);
	
	//char*を渡す場合
	char *aCString = "thestring";
	NSValue *theValue = [NSValue valueWithBytes:&aCString objCType:@encode(char *)];
	char *bufferChar[100];
	[theValue getValue:&bufferChar];
	NSLog(@"---%s",*bufferChar);
	
	//単にポインタを渡す場合
	id anObject = @"Obj-C string";
	NSValue *theValueOfPointer = [NSValue valueWithBytes:&anObject objCType:@encode(void *)];
	id theObjPointer;
	[theValueOfPointer getValue:&theObjPointer];
	NSLog(@"---%@",theObjPointer);
	
	//上の例を書き換えるとこうなる
	NSValue *theValueOfObj = [NSValue valueWithNonretainedObject:@"Obj-C string"];
	id theObj;
	[theValueOfObj getValue:&theObj];
	NSLog(@"---%@",theObj);
	
	//intを渡す場合
	int intValue = 1234;
	NSValue *theValueOfInt = [NSValue valueWithBytes:&intValue objCType:@encode(int)];
	int bufferInt;
	[theValueOfInt getValue:&bufferInt];
	NSLog(@"---%d",bufferInt);
	
	//Sizeを渡す場合
	NSSize aSize = NSMakeSize(1.0,2.0);
	NSValue *theValueOfSize = [NSValue valueWithBytes:&aSize objCType:@encode(NSSize)];
	NSSize bufferSize;
	[theValueOfSize getValue:&bufferSize];
	NSLog(@"---(%f,%f)",bufferSize.width,bufferSize.height);
	
	//Rectを渡す場合
	NSRect aRect = NSMakeRect(1.0,2.0,300,400);
	NSValue *theValueOfRect = [NSValue valueWithBytes:&aRect objCType:@encode(NSRect)];
	NSRect bufferRect;
	[theValueOfRect getValue:&bufferRect];
	NSLog(@"---((%f,%f),(%f,%f))",bufferRect.origin.x,bufferRect.origin.y,bufferRect.size.width,bufferRect.size.height);
	
}

@end