objective c - আমি কিভাবে NSTimer ব্যবহার করবেন?




objective-c cocoa (4)

উত্তর দিন টাইমার নির্দিষ্ট সময় অনুপস্থিত এখানে পরবর্তী ঘন্টা হয়:

NSCalendarUnit allUnits = NSCalendarUnitYear   | NSCalendarUnitMonth |
                          NSCalendarUnitDay    | NSCalendarUnitHour  |
                          NSCalendarUnitMinute | NSCalendarUnitSecond;

NSCalendar *calendar = [[ NSCalendar alloc]  
                          initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *weekdayComponents = [calendar components: allUnits 
                                                  fromDate: [ NSDate date ] ];

[ weekdayComponents setHour: weekdayComponents.hour + 1 ];
[ weekdayComponents setMinute: 0 ];
[ weekdayComponents setSecond: 0 ];

NSDate *nextTime = [ calendar dateFromComponents: weekdayComponents ];

refreshTimer = [[ NSTimer alloc ] initWithFireDate: nextTime
                                          interval: 0.0
                                            target: self
                                          selector: @selector( doRefresh )
                                          userInfo: nil repeats: NO ];

[[NSRunLoop currentRunLoop] addTimer: refreshTimer forMode: NSDefaultRunLoopMode];

অবশ্যই, আপনার ক্লাস এর পছন্দসই পদ্ধতির সাথে "doRefresh" বিকল্প

একবার ক্যালেন্ডার বস্তু তৈরি করার চেষ্টা করুন এবং allUnits দক্ষতার জন্য একটি স্ট্যাটিক করুন।

এক ঘন্টার কম্পোনেন্ট যুক্ত করা ঠিক সূক্ষ্ম, মধ্যরাত্রি পরীক্ষার কোন প্রয়োজন নেই ( link )

আমি কিভাবে একটি NSTimer ব্যবহার NSTimer ? কেউ আমাকে ধাপে ধাপে নির্দেশ দিতে পারেন?


এটার মতো কিছু:

NSTimer *timer;

    timer = [NSTimer scheduledTimerWithTimeInterval: 0.5
                     target: self
                     selector: @selector(handleTimer:)
                     userInfo: nil
                     repeats: YES];

প্রথমত আমি কোকো / সিএফ ডকুমেন্টেশন (যা সর্বদা কল একটি মহান প্রথম বন্দর) আপনার মনোযোগ আঁকতে চান। "কম্প্যানিয়ন গাইডস" নামক প্রতিটি রেফারেন্স নিবন্ধের শীর্ষে অ্যাপল ডক্সগুলির একটি বিভাগ রয়েছে, যা বিষয়টিকে নথিভুক্ত করা (যদি বিদ্যমান থাকে) জন্য নির্দেশিকা তালিকাভুক্ত করে। উদাহরণস্বরূপ, NSTimer , দস্তাবেজ দুটি সহযোগী নির্দেশিকা তালিকাবদ্ধ করে:

আপনার পরিস্থিতির জন্য, টিমার প্রোগ্রামিং টপিক্স নিবন্ধটি সবচেয়ে উপকারী হতে পারে, যদিও থ্রেডিং বিষয়গুলি সম্পর্কিত তবে ক্লাস সম্পর্কিত নথির সাথে সরাসরি সম্পর্কিত নয়। যদি আপনি টিমার প্রোগ্রামিং টপিক্স নিবন্ধটি দেখুন, এটি দুটি অংশে বিভক্ত:

  • টাইমার
  • টাইমার ব্যবহার করে

এই ফরম্যাটটি গ্রহণ করার জন্য নিবন্ধগুলির জন্য, "টাইমারগুলি ব্যবহার করা" বিভাগে এই ক্ষেত্রে, ক্লাসের ওভারভিউ এবং এর জন্য কী ব্যবহার করা হয় এবং তারপরে কীভাবে এটি ব্যবহার করা যায় তার কিছু নমুনা কোড রয়েছে। "টাইমার তৈরি এবং নির্ধারণ করা", "টাইমার বন্ধ করা" এবং "স্মৃতি ব্যবস্থাপনা" বিভাগগুলিতে বিভাগ রয়েছে। নিবন্ধ থেকে, একটি নির্ধারিত, অ পুনরাবৃত্তিকারী টাইমার তৈরি করা ভালো কিছু করা যেতে পারে:

[NSTimer scheduledTimerWithTimeInterval:2.0
    target:self
    selector:@selector(targetMethod:)
    userInfo:nil
    repeats:NO];

এটি একটি টাইমার তৈরি করবে যা 2.0 সেকেন্ডের পরে বহিস্কার করা হবে এবং targetMethod: কল targetMethod: self , যা NSTimer ইনস্ট্যান্সের একটি পয়েন্টার।

আপনি যদি পদ্ধতিতে আরো বিস্তারিতভাবে দেখতে চান তবে আপনি আরো তথ্যের জন্য ডক্সগুলিতে ফিরে যেতে পারেন, তবে কোডটির চারপাশে ব্যাখ্যাও রয়েছে।

যদি আপনি টাইমারটি পুনরাবৃত্তি করতে চান তবে এটি বন্ধ করতে চান (অথবা এটি পুনরাবৃত্তি করার আগে একটি পুনরাবৃত্তিকারী টাইমার বন্ধ করুন) তবে আপনাকে NSTimer ইনস্ট্যান্সে তৈরি করা একটি পয়েন্টার রাখতে হবে; প্রায়শই এটি একটি ইনস্ট্যান্স ভেরিয়েবল হতে হবে যাতে আপনি অন্য পদ্ধতিতে এটি উল্লেখ করতে পারেন। তারপর আপনি NSTimer ইনস্ট্যান্সে invalidate কল করতে পারেন:

[myTimer invalidate];
myTimer = nil;

ইনস্ট্যান্স ভ্যারিয়েবলটি nil করাও ভাল অনুশীলন (উদাহরণস্বরূপ যদি আপনার পদ্ধতিটি টাইমারকে অবৈধ করে তুলতে পারে তবে একাধিকবার বলা হয় এবং ইনস্ট্যান্স ভেরিয়েবলটি NSTimer সেট করা নেই এবং NSTimer উদাহরণটি বাতিল করা হয়েছে, এটি একটি ব্যতিক্রম নিক্ষেপ করবে) ।

নিবন্ধটির নীচে মেমরি ম্যানেজমেন্টের বিন্দুটিও লক্ষ্য করুন:

রান লুপটি টাইমারকে বজায় রাখে, মেমরি পরিচালনার দৃষ্টিকোণ থেকে এটি নির্দিষ্টভাবে টাইমারের রেফারেন্স রাখার পরে কোনও রেফারেন্স রাখার প্রয়োজন নেই । যেহেতু আপনি নির্বাচক হিসাবে তার পদ্ধতি উল্লেখ করার সময় টাইমারটি একটি যুক্তি হিসাবে পাস করা হয়, তাই আপনি যে পদ্ধতিতে উপযুক্ত হলে পুনরাবৃত্তিকারী টাইমারটি অবৈধ করতে পারেন । তবে, বেশিরভাগ ক্ষেত্রেই আপনি টাইমারটি অকার্যকর করার বিকল্পটি চান-সম্ভবত এটি শুরু হওয়ার আগেও। এই ক্ষেত্রে, আপনাকে টাইমারের একটি রেফারেন্স রাখতে হবে, যাতে আপনি যখনই যথাযথভাবে একটি অবৈধ বার্তা পাঠাতে পারেন । যদি আপনি একটি অনির্ধারিত টাইমার তৈরি করেন ("অনির্দিষ্টকালীন টাইমারগুলি" দেখুন), তবে আপনার টাইমারের একটি শক্তিশালী রেফারেন্স বজায় রাখতে হবে (একটি রেফারেন্স-গণিত পরিবেশে, আপনি এটি বজায় রাখুন) যাতে এটি ব্যবহার করার আগে এটি নিষ্ক্রিয় করা হয় না।


#import "MyViewController.h"

@interface MyViewController ()

@property (strong, nonatomic) NSTimer *timer;

@end

@implementation MyViewController

double timerInterval = 1.0f;

- (NSTimer *) timer {
    if (!_timer) {
        _timer = [NSTimer timerWithTimeInterval:timerInterval target:self selector:@selector(onTick:) userInfo:nil repeats:YES];
    }
    return _timer;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}

-(void)onTick:(NSTimer*)timer
{
    NSLog(@"Tick...");
}

@end




nstimer