উত্তর:
@ সাইনথাইজাইজ আপনার সম্পত্তির জন্য গেটর এবং সেটার পদ্ধতি উত্পন্ন করবে। @ মডেলামিক কেবল সংকলককে বলেছে যে গেটর এবং সেটার পদ্ধতিগুলি ক্লাস নিজেই নয় বরং অন্য কোথাও প্রয়োগ করেছে (সুপারক্লাসের মতো বা রানটাইমের সময় সরবরাহ করা হবে)।
@ আইনামিকের জন্য ব্যবহারগুলি উদাহরণস্বরূপ NSManagedObject
(কোরিডাটা) এর সাবক্লাস সহ বা যখন আপনি কোনও সুপারক্লাস দ্বারা সংজ্ঞায়িত কোনও সম্পদের জন্য একটি আউটলেট তৈরি করতে চান যা আউটলেট হিসাবে সংজ্ঞায়িত হয়নি।
অ্যাক্সেসরগুলি বাস্তবায়নের জন্য দায়িত্ব অর্পণ করার জন্য @ মডেলিকও ব্যবহার করা যেতে পারে। আপনি যদি ক্লাসের মধ্যেই অ্যাক্সেসরগুলি নিজেই প্রয়োগ করেন তবে আপনি সাধারণত @dynic ব্যবহার করবেন না।
সুপার ক্লাস:
@property (nonatomic, retain) NSButton *someButton;
...
@synthesize someButton;
উপশ্রেণী:
@property (nonatomic, retain) IBOutlet NSButton *someButton;
...
@dynamic someButton;
NSUnknownKeyException
সরিয়ে দেওয়ার সময় আমি আমার গতিশীল সম্পত্তি নিয়ে ত্রুটিগুলি পেয়েছিলাম @synthesize
(এক্সকোড ৩.২ আমাকে একটি ত্রুটি দিচ্ছিল বি / সি আমার @ প্রোপার্টিটির সাথে আমার কোনও মিল নেই ivar)। @dynamic
সংশোধন করা সমস্যাটি সংযোজন - সংকলন এবং এখন দুর্দান্ত runs ধন্যবাদ!
@property
আইটেম তন্ন তন্ন আছে @synthesize
কিংবা @dynamic
স্বয়ং-সংশ্লেষিত হবে। প্রতিটি সম্পত্তির জন্য, একটি শীর্ষস্থানীয় আন্ডারস্কোর সহ আইভার _propertyName
তৈরি করা হবে, যথাযথ গেটর এবং সেটার সহ।
এই নিবন্ধটি একবার দেখুন ; "রানটাইম প্রদানের পদ্ধতি" শিরোনামে:
কিছু অ্যাক্সেসর রানটাইম সময়ে গতিশীলভাবে তৈরি করা হয়, যেমন কোরডাটার এনএস ম্যানেজডঅবজেক্ট ক্লাসে ব্যবহৃত নির্দিষ্ট কিছু। আপনি যদি এই কেসগুলির জন্য বৈশিষ্ট্যগুলি ঘোষণা করতে এবং ব্যবহার করতে চান তবে সংকলনের সময় অনুপস্থিত পদ্ধতিগুলি সম্পর্কে সতর্কতা এড়াতে চান, আপনি @ সংশ্লেষের পরিবর্তে @ নমুনা নির্দেশিকা ব্যবহার করতে পারেন।
...
@Dnamic নির্দেশাবলী ব্যবহার করে মূলত সংকলককে বলে "এটি সম্পর্কে চিন্তা করবেন না, একটি পদ্ধতি চলছে" "
@synthesize
নির্দেশক, অন্য দিকে, কম্পাইল মুহুর্তে আপনার জন্য অ্যাকসেসর পদ্ধতি উত্পন্ন (যদিও হিসাবে "মিক্সিং সংশ্লেষিত এবং কাস্টম Accessors" বিভাগে লক্ষনীয় এটা নমনীয় এবং যদি পারেন বাস্তবায়িত তোমার জন্য পদ্ধতি উৎপন্ন করে না)।
অন্যরা যেমন বলেছে, সাধারণভাবে আপনি সংকলকটি আপনার জন্য প্রযোজক এবং / অথবা সেটিংস তৈরি করতে এবং আপনি নিজেরাই লিখতে চলেছেন তবে @ সংজ্ঞায়িত ব্যবহার করুন
এখনও উল্লেখ করা হয়নি এমন আরও একটি সূক্ষ্মতা রয়েছে: @ সায়েন্টেসাইজ আপনাকে গেটর বা সেটার উভয়েরই একটি বাস্তবায়ন প্রদান করতে দেবে । এটি কার্যকর যদি আপনি কেবল কিছু অতিরিক্ত যুক্তির জন্য গেটর বাস্তবায়ন করতে চান তবে সংকলকটি সেটারটি তৈরি করতে দিন (যা সাধারণত নিজেকে লেখার ক্ষেত্রে কিছুটা জটিল)।
তবে, আপনি যদি @ সংশ্লেষিত অ্যাক্সেসরের জন্য একটি প্রয়োগ লিখে থাকেন তবে এটি অবশ্যই একটি বাস্তব ক্ষেত্রের দ্বারা সমর্থন করা উচিত (যেমন, আপনি যদি লিখেন তবে -(int) getFoo();
আপনার অবশ্যই একটি int foo;
ক্ষেত্র থাকতে হবে)। মানটি যদি অন্য কোনও কিছু দ্বারা উত্পাদিত হয় (উদাহরণস্বরূপ অন্যান্য ক্ষেত্রগুলি থেকে গণনা করা হয়) তবে আপনাকে @dynamic ব্যবহার করতে হবে।
@dynamic
আপনি যদি সেগুলি নিজেই লিখতে চলেছেন" না, আপনি নিজেরাই লিখলে আপনি গতিশীল ব্যবহার করবেন না। @dynamic
আপনি তাদের প্রয়োগ করেছেন তা নিশ্চিত করতে সংকলক চেকিং বন্ধ করে দেয়। আপনি যদি এগুলি নিজে প্রয়োগ করেন তবে আপনি সংকলকটি চেক করতে চান।
রানডাইমে যখন কোনও সম্পত্তি গতিশীলভাবে তৈরি করা হয় তখন @ সংজ্ঞা সাধারণত ব্যবহার করা হয় (যেমন উপরে বলা হয়েছে)। এনএসম্যানেজডঅবজেক্ট এটি করে (কেন এর সমস্ত বৈশিষ্ট্য গতিশীল) - যা কিছু সংকলক সতর্কতাগুলিকে দমন করে।
কীভাবে গতিশীলভাবে বৈশিষ্ট্য তৈরি করা যায় সে সম্পর্কে একটি ভাল ওভারভিউর জন্য (এনএসম্যানেজডঅবজেক্ট এবং কোরডাটা ছাড়াই: দেখুন: http://developer.apple.com/library/ios/#docamentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtDynamicResolution.html#// apple_ref / ডক / ইউআইডি / TP40008048-CH102-SW1
এখানে @dynamic উদাহরণ
#import <Foundation/Foundation.h>
@interface Book : NSObject
{
NSMutableDictionary *data;
}
@property (retain) NSString *title;
@property (retain) NSString *author;
@end
@implementation Book
@dynamic title, author;
- (id)init
{
if ((self = [super init])) {
data = [[NSMutableDictionary alloc] init];
[data setObject:@"Tom Sawyer" forKey:@"title"];
[data setObject:@"Mark Twain" forKey:@"author"];
}
return self;
}
- (void)dealloc
{
[data release];
[super dealloc];
}
- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector
{
NSString *sel = NSStringFromSelector(selector);
if ([sel rangeOfString:@"set"].location == 0) {
return [NSMethodSignature signatureWithObjCTypes:"v@:@"];
} else {
return [NSMethodSignature signatureWithObjCTypes:"@@:"];
}
}
- (void)forwardInvocation:(NSInvocation *)invocation
{
NSString *key = NSStringFromSelector([invocation selector]);
if ([key rangeOfString:@"set"].location == 0) {
key = [[key substringWithRange:NSMakeRange(3, [key length]-4)] lowercaseString];
NSString *obj;
[invocation getArgument:&obj atIndex:2];
[data setObject:obj forKey:key];
} else {
NSString *obj = [data objectForKey:key];
[invocation setReturnValue:&obj];
}
}
@end
int main(int argc, char **argv)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Book *book = [[Book alloc] init];
printf("%s is written by %s\n", [book.title UTF8String], [book.author UTF8String]);
book.title = @"1984";
book.author = @"George Orwell";
printf("%s is written by %s\n", [book.title UTF8String], [book.author UTF8String]);
[book release];
[pool release];
return 0;
}
ডকুমেন্টেশন অনুযায়ী:
@dynamic সংকলককে বলে যে অ্যাক্সেসর পদ্ধতি রানটাইমের সময় সরবরাহ করা হয়।
কিছুটা তদন্তের সাথে আমি জানতে পেরেছি যে অ্যাক্সেসর পদ্ধতি সরবরাহের ফলে @dynic নির্দেশিকা ওভাররাইড হয়ে যায়।
@ সায়েন্টেসাইজ আপনার জন্য এই অ্যাক্সেসরগুলি তৈরি করতে সংকলককে বলে (গেটর এবং সেটার)
@ প্রপার্টি সংকলককে জানায় যে অ্যাকসেসরগুলি তৈরি করা হবে এবং এটি বিন্দু চিহ্নিতকরণ বা [বস্তুর বার্তা] দিয়ে অ্যাক্সেস করা যেতে পারে
একটি জিনিস যুক্ত করতে চাই যে কোনও সম্পত্তি যদি @Dynnamic হিসাবে ঘোষণা করা হয় তবে এটি মেমরি দখল করবে না (বরাদ্দকরণের সরঞ্জাম দিয়ে আমি নিশ্চিত করেছি)। ফলাফল আপনি শ্রেণি বিভাগে সম্পত্তি ঘোষণা করতে পারেন।
অ্যাপল ডকুমেন্টেশন অনুযায়ী।
আপনি ঘোষণায় @synthesize
প্রদত্ত স্পেসিফিকেশনের সাথে মেলে এমন বাস্তবায়ন তৈরি করতে সংকলককে বলতে ক্লাসের বাস্তবায়ন ব্লকে আপনি বিবৃতিটি ব্যবহার করেন @property
।
আপনি @dynamic
বিবৃতিটি দ্বারা @property
সংজ্ঞায়িত অ্যাকসেসর পদ্ধতির কোনও প্রয়োগ খুঁজে না পেয়ে যদি কোনও সংকেতকে দমন করতে সংক্ষেপককে বলতে স্টেটমেন্টটি ব্যবহার করেন ।
অধিক তথ্য:-